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 la fonction comme startActivity () ou setResult (). depuis l’adaptateur ne s’étend pas à l’activité.

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

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

Lorsque vous implémentez onClickListener , vous pouvez utiliser v.getContext.startActivity .

 btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { v.getContext().startActivity(PUT_YOUR_INTENT_HERE); } }); 
 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); } }); } } 

Pour les nouvelles versions de sdk, vous devez définir la tâche d’activité de l’indicateur.

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

Le rappel de l’adaptateur à l’activité peut être effectué à l’aide de l’enregistrement de l’écouteur sous forme d’interface: Créer 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"); } 

// fais ceci là où tu as besoin de tirer l’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 } }