wake-up-neo.com

Wie starte ich die Aktivität im Adapter?

Ich habe eine ListActivity mit meinem benutzerdefinierten Adapter. In jeder Ansicht kann es einige Schaltflächen geben, in denen ich OnClickListener implementieren muss. Ich muss den OnClickListener im Adapter implementieren. Ich weiß jedoch nicht, wie ich die Funktion wie startActivity () oder setResult () aufrufen kann. da der Adapter nicht auf Activity erweitert wird. 

was ist der beste Weg, um dieses Problem zu lösen? Vielen Dank 

56
justicepenny

Übergeben Sie einfach den aktuellen Kontext an den Adapter-Konstruktor und speichern Sie ihn als Feld. Dann können Sie in onClick diesen Kontext verwenden, um startActivity () aufzurufen.

pseudo-Code

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() {
                 context.startActivity(...);
             }
         });
     }
}
153
Robby Pond

Bei der Implementierung von onClickListener können Sie v.getContext.startActivity verwenden.

btn.setOnClickListener(new OnClickListener() {                  
    @Override
    public void onClick(View v) {
        v.getContext().startActivity(PUT_YOUR_INTENT_HERE);
    }
});
47
ccheneson
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, goto.class);
                   intent.putextra("your_extra","your_class_value");
                 context.startActivity(intent);
             }
         });
     }
}
28
edwin

Für neuere Versionen von SDK müssen Sie die Taskaktivitä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);
 }
9
Kamran

der Rückruf vom Adapter an die Aktivität kann mithilfe der Registrierung des Listeners in Form der Schnittstelle erfolgen: Machen Sie eine Schnittstelle:

      public MyInterface{
         public void  yourmethod(//incase needs parameters );
         }

Sagen wir in Adapter: 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 abfeuern 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
                     }
                     }
1
DevKRos

So starten Sie die Aktivität in Adopters Button onClickListener:

Intent myIntent = new Intent(view.getContext(),Event_Member_list.class);                    myIntent.putExtra("intVariableName", eventsList.get(position).getEvent_id());
                view.getContext().startActivity(myIntent);
0
sheraz Ahmed

Wenn Sie anstelle von Aktivität von Ihrer Adapterklasse auf URL umleiten möchten, übergeben Sie den Kontext 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);
            }
        });
0
Nimesh Patel