web-dev-qa-db-fra.com

Comment démarrer l'activité dans l'adaptateur?

J'ai un ListActivity avec mon adaptateur personnalisé. et à l'intérieur de chaque vue, il peut y avoir des boutons dans lesquels je dois implémenter OnClickListener. Je dois implémenter OnClickListener dans l'adaptateur. Cependant, je ne sais pas comment appeler une fonction comme startActivity () ou setResult (). puisque l'adaptateur ne s'étend pas à l'activité. 

alors, quel est le meilleur moyen de résoudre ce problème? Merci 

56
justicepenny

Passez simplement le contexte actuel au constructeur de l'adaptateur et stockez-le en tant que champ. Ensuite, à l'intérieur du onClick, vous pouvez utiliser ce contexte pour appeler startActivity ().

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

Lors de l'implémentation de onClickListener, vous pouvez utiliser v.getContext.startActivity.

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

Pour les versions plus récentes de sdk, vous devez définir la tâche d'activité d'indicateur.

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

rappel de l'adaptateur à l'activité peut être fait en utilisant listing listener sous forme d'interface: Faire une interface:

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

Dans Adaptateur disons 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");
          }

// fais ceci où tu as besoin de tirer auditeur 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

Un moyen simple de démarrer l'activité dans le bouton d'adopteur 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

Si vous voulez rediriger sur l'URL au lieu d'activité de votre classe d'adaptateur, alors passez le contexte avec startactivity.

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