Ich habe eine ListActivity mit meinem benutzerdefinierten Adapter und in jeder Ansicht befinden sich möglicherweise einige Schaltflächen, die ich implementieren muss OnClickListener
. Ich muss das OnClickListener
im Adapter implementieren . Ich weiß jedoch nicht, wie ich die Funktion wie startActivity()
oder aufrufen soll setResult()
. Da sich der Adapter nicht auf Aktivität erstreckt.
Was ist der beste Weg, um dieses Problem zu lösen?
Vielen Dank.
java
android
android-activity
adapter
Gerechtigkeitspfennig
quelle
quelle
Bei der Implementierung
onClickListener
können Sie verwendenv.getContext.startActivity
.btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { v.getContext().startActivity(PUT_YOUR_INTENT_HERE); } });
quelle
public class MyAdapter extends Adapter { private Context context; public MyAdapter(Context context) { this.context = context; } public View getView(...){ View v; v.setOnClickListener(new OnClickListener() { void onClick() { Intent intent= new Intent(context, ToActivity.class); intent.putExtra("your_extra","your_class_value"); context.startActivity(intent); } }); } }
quelle
Für neuere Versionen von sdk müssen Sie die Flag-Aktivitätsaufgabe festlegen.
public void onClick(View v) { Intent myactivity = new Intent(context.getApplicationContext(), OtherActivity.class); myactivity.addFlags(FLAG_ACTIVITY_NEW_TASK); context.getApplicationContext().startActivity(myactivity); }
quelle
Der Rückruf vom Adapter zur Aktivität kann über die Registrierung des Listeners in Form einer Schnittstelle erfolgen: Erstellen Sie eine Schnittstelle:
public MyInterface{ public void yourmethod(//incase needs parameters ); }
Im Adapter sagen wir MyAdapter:
public MyAdapter extends BaseAdapter{ private MyInterface listener; MyAdapter(Context context){ try { this. listener = (( MyInterface ) context); } catch (ClassCastException e) { throw new ClassCastException("Activity must implement MyInterface"); }
// mach das, wo du den Listener l feuern musst l
try { listener . yourmethod (); } catch (ClassCastException exception) { // do something } In Activity Implement your method: MyActivity extends AppCompatActivity implements MyInterface{ yourmethod(){ //do whatever you want } }
quelle
Einfache Möglichkeit, die Aktivität in der Adopter-Schaltfläche onClickListener zu starten:
Intent myIntent = new Intent(view.getContext(),Event_Member_list.class); myIntent.putExtra("intVariableName", eventsList.get(position).getEvent_id()); view.getContext().startActivity(myIntent);
quelle
Erste Lösung:
Sie können die Startaktivität in Ihrem Adapter folgendermaßen aufrufen:
public class YourAdapter extends Adapter { private Context context; public YourAdapter(Context context) { this.context = context; } public View getView(...){ View v; v.setOnClickListener(new OnClickListener() { void onClick() { context.startActivity(...); } }); } }
Zweite Lösung:
Sie können
onClickListener
Ihren Button aus derYourAdapter
Klasse heraus aufrufen . Folge diesen Schritten:Erstellen Sie eine Schnittstelle wie diese:
public YourInterface{ public void yourMethod(args...); }
Dann in Ihrem Adapter:
public YourAdapter extends BaseAdapter{ private YourInterface listener; public YourAdapter (Context context, YourInterface listener){ this.listener = listener; this.context = context; } public View getView(...){ View v; v.setOnClickListener(new OnClickListener() { void onClick() { listener.yourMethod(args); } }); }
Und wo Sie Ihren Adapter initiieren, ist wie folgt:
YourAdapter adapter = new YourAdapter(getContext(), (args) -> { startActivity(...); });
Dieser Link kann für Sie nützlich sein.
quelle
Wenn Sie eine URL anstelle einer Aktivität von Ihrer Adapterklasse umleiten möchten, übergeben Sie den Kontext von mit Startaktivität.
btnInstall.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse(link)); intent.setData(Uri.parse(link)); context.startActivity(intent); } });
quelle