如何启动适配器中的活动?
我有我的自定义适配器的ListActivity。 并在每个视图中,它可能有一些button,其中我需要实现OnClickListener。 我需要在适配器中实现OnClickListener。 但是,我不知道如何调用像startActivity()或setResult()函数。 因为适配器不会扩展到Activity。
那么解决这个问题的最好方法是什么? 谢谢
只需将当前上下文传递给Adapter构造函数,并将其作为字段存储即可。 然后,在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(...); } }); } }
在实现v.getContext.startActivity
,可以使用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); }
从适配器到活动的callback可以通过以接口的forms注册监听器来完成:创build一个接口:
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"); }
/ /这样你需要消防监听器
try { listener . yourmethod (); } catch (ClassCastException exception) { // do something } In Activity Implement your method: MyActivity extends AppCompatActivity implements MyInterface{ yourmethod(){ //do whatever you want } }