Я столкнулся с ошибками, пытаясь отправить электронную почту, щелкнув поле textview внутри списка с помощью Xamarin, все связанные с экземпляром активности, которая не может быть вызвана электронной почтой Intent.отправьте электронное письмо, нажав textview в настраиваемом списке с помощью android Xamarin
Я пробовал разные подходы, но никакого успеха вообще не было. Сначала я попытался вызвать метод внутри класса активности (я использовал метод для этого в адаптере, но он не работал); , поэтому я изменился, чтобы попытаться вызвать событие click для текстового просмотра. В Java это кажется легко сделать с выражением:
if (mContext instanceof MyActivity) { methodCall() };
В C#, я пытался использовать
if (mContext.GetType() == TypeOf(ListaVereadoresActivity))
, но это не работает, А также, представленное решение в коде ниже, пытаясь вызвать StartActivity(email);
ERROR: Unhandled Exception: Java.Lang.Exception: No Activity found to handle Intent { act=android.intent.action.SEND typ=message/rfc822 flg=0x10000000 (has extras) }
КОД ОБРАЗЦОВ:
[Activity(Label = "Vereadores")]
public class ListaVereadoresActivity : Activity
{
List<Vereador> listaVer = new List<Vereador>();
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.listaVereadores_layout);
GenerateListaVereadores();
ListView vereadorListView = FindViewById<ListView>(Resource.Id.lstVereadores2);
vereadorListView.ItemClick += OnListItemClick;
VereadorAdapter adapter = new VereadorAdapter(this, listaVer, this.ApplicationContext);
vereadorListView.Adapter = adapter;
}
// больше не используя
public void SendEmail(String emailAdd)
{
var email = new Intent(Android.Content.Intent.ActionSend);
email.SetType("message/rfc822");
email.PutExtra(Android.Content.Intent.ExtraEmail, new string[] { emailAdd });
StartActivity(email);
}
private void GenerateListaVereadores()
{
var azuaite = new Vereador();
azuaite.Nome = "Azuaite";
azuaite.Foto = Resource.Drawable.azuaite;
azuaite.Email = "[email protected]";
listaVer.Add(azuaite);
var aleksander = new Vereador();
aleksander.Nome = "Aleksander";
aleksander.Foto = Resource.Drawable.aleksander;
aleksander.Email = "[email protected]";
listaVer.Add(aleksander);
var dhony = new Vereador();
dhony.Nome = "dhony";
dhony.Foto = Resource.Drawable.dhony;
dhony.Email = "[email protected]";
listaVer.Add(dhony);
}
void OnListItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
var listView = sender as ListView;
var t = listaVer[e.Position];
Toast.MakeText(this, t.Nome, ToastLength.Short).Show();
}
мой пользовательский адаптер:
public class VereadorAdapter : BaseAdapter
{
private List<Vereador> vereadorList;
Activity activity;
protected Context mContext;
public VereadorAdapter(Activity act, List<Vereador> v, Context appContext)
{
activity = act;
vereadorList = v;
mContext = appContext;
}
public override int Count
{
get { return vereadorList.Count; }
}
class ViewHolder : Java.Lang.Object
{
public TextView nomeVereadorTxt { get; set; }
public TextView emailVereadorTxt { get; set; }
public ImageView fotoVereadorImg { get; set; }
}
public override Java.Lang.Object GetItem(int position)
{
var vereador = (Vereador)vereadorList[position];
return vereador;
}
public override long GetItemId(int position)
{
return 0;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
var item = vereadorList[position];
ViewHolder holder;
var view = convertView;
if (view != null)
{
holder = view.Tag as ViewHolder;
}
else
{
holder = new ViewHolder();
view = activity.LayoutInflater.Inflate(Resource.Layout.CustomView, parent, false);
holder.nomeVereadorTxt = view.FindViewById<TextView>(Resource.Id.VereadorNome);
holder.fotoVereadorImg = view.FindViewById<ImageView>(Resource.Id.VereadorFoto);
holder.emailVereadorTxt = view.FindViewById<TextView>(Resource.Id.VereadorEmail);
view.Tag = holder;
}
//setar as propriedades dos componentes
holder.emailVereadorTxt.Text = item.Nome;
holder.fotoVereadorImg.SetImageResource(item.Foto);
holder.emailVereadorTxt.Text = item.Email;
holder.emailVereadorTxt.Click += EmailVereadorTxt_Click;
return view;
}
private void EmailVereadorTxt_Click(object sender, EventArgs e)
{
TextView tv = (sender as TextView);
string mailAddress = tv.Text;
Toast.MakeText(activity.BaseContext, mailAddress, ToastLength.Short).Show();
var email = new Intent(Android.Content.Intent.ActionSend);
email.AddFlags(ActivityFlags.NewTask);
email.SetType("message/rfc822");
email.PutExtra(Android.Content.Intent.ExtraEmail, new string[] { mailAddress });
Application.Context.ApplicationContext.StartActivity(email);
}
}
здесь мой пользовательский вид:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:background="@drawable/CustomSelector">
<ImageView
android:id="@+id/VereadorFoto"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/Icon" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/VereadorNome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:paddingTop="5dp" />
<TextView
android:id="@+id/VereadorEmail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"
android:paddingTop="5dp" />
</LinearLayout>
</LinearLayout>
Итак, как правильно реализовать посыла по электронной почте, нажав на текст электронной почты?
Hi. Спасибо. исправлено с помощью небольшого изменения: в пользовательском классе адаптера: (активность как ListaVereadoresActivity) .SendEmail (mailAddress); и в связанной с ним деятельности: public void SendEmail (String emailAddress) {//} –