Ich stehe vor Fehler beim Versenden von E-Mails durch Klicken auf ein Textfeld in einem Listenansicht mit Xamarin, alle im Zusammenhang mit der Instanz der Aktivität nicht verfügbar, um die E-Mail-Absicht aufrufen.senden Sie E-Mail durch Klicken auf Textansicht in angepasster Listenansicht mit Android Xamarin
Ich habe verschiedene Ansätze ausprobiert, aber keinen Erfolg. zuerst Ich habe versucht, eine Methode innerhalb der Aktivität Clas aufzurufen (ich habe eine Methode dafür in Adapter verwendet, aber es hat nicht funktioniert); Ich habe also geändert, um das Click-Ereignis von textview aufzurufen. In Java scheint es leicht mit dem Ausdruck getan:
if (mContext instanceof MyActivity) { methodCall() };
in C#, habe ich versucht,
if (mContext.GetType() == TypeOf(ListaVereadoresActivity))
zu verwenden, aber das funktioniert nicht, Und auch die vorgestellte Lösung in Code unten, versucht, die 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) }
Codebeispiele zu nennen:
[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;
}
// Verwendung nicht mehr
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();
}
meinen benutzerdefinierten Adapter:
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);
}
}
hier meine benutzerdefinierte Ansicht:
<?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>
Also, wie ist der richtige Weg, um eine Sende zu implementieren E-Mail-Aktion durch Klicken auf den E-Mail-Text?
Hallo. Danke. habe es durch eine kleine Änderung behoben: in der benutzerdefinierten Adapterklasse: (Aktivität als ListaVereadoresActivity) .SendEmail (mailAddress); und in der zugehörigen Aktivität: public void SendEmail (String emailAddress) {//} –