75 votes

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

J'ai une ListActivity avec mon adaptateur personnalisé et à l'intérieur de chacune des vues, il peut y avoir des boutons dans lesquels je dois implémenter OnClickListener . J'ai besoin d'implémenter le OnClickListener dans l'adaptateur. Cependant, je ne sais pas comment appeler la fonction comme startActivity() ou setResult() . Étant donné que l'adaptateur ne s'étend pas à Activity.

Alors, quelle est la meilleure façon de résoudre ce problème ?

Merci.

199voto

Robby Pond Points 37875

Il suffit de transmettre le contexte actuel au constructeur de l'adaptateur et de le stocker 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(...);
             }
         });
     }
}

65voto

ccheneson Points 24031

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);
    }
});

32voto

edwin Points 1974
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);
             }
         });
     }
}

13voto

Kamran Points 2631

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

 public void onClick(View v)
 {
     Intent myactivity = new Intent(context.getApplicationContext(), OtherActivity.class);
     myactivity.addFlags(FLAG_ACTIVITY_NEW_TASK);
     context.getApplicationContext().startActivity(myactivity);
 }

2voto

DevKRos Points 362

le rappel de l'adaptateur à l'activité peut être effectué à l'aide de l'écouteur d'enregistrement sous forme d'interface : Faire une interface :

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

Dans l'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");
          }

// faites ceci là où vous avez besoin de virer l'écouteur je

           try {
                listener . yourmethod ();
            } catch (ClassCastException exception) {
               // do something
            }

      In Activity Implement your method:


         MyActivity extends AppCompatActivity implements MyInterface{

                yourmethod(){
                //do whatever you want
                     }
                     }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X