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