Как начать работу в адаптере?

У меня есть ListActivity с моим адаптированным адаптером. И внутри каждого из них могут быть некоторые кнопки, в которых мне нужно реализовать OnClickListener. Мне нужно реализовать OnClickListener в адаптере. Однако я не знаю, как вызвать функцию типа startActivity () или setResult (). Поскольку адаптер не распространяется на Activity.

Так что лучший способ решить эту проблему? благодаря

Solutions Collecting From Web of "Как начать работу в адаптере?"

Просто перейдите в текущий контекст к конструктору адаптера и сохраните его как поле. Затем внутри onClick вы можете использовать этот контекст для вызова startActivity ().

псевдокод

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

При реализации onClickListener вы можете использовать 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); } }); } } 

Для новых версий sdk вы должны установить задачу активности флага.

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

Обратный вызов от адаптера к активности может быть выполнен с помощью регистрации слушателя в виде интерфейса: Сделать интерфейс:

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

В адаптере Скажем, 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"); } 

// делаем это, когда вам нужно стрелять слушателем l

  try { listener . yourmethod (); } catch (ClassCastException exception) { // do something } In Activity Implement your method: MyActivity extends AppCompatActivity implements MyInterface{ yourmethod(){ //do whatever you want } }