如何在适配器中启动Activity?

jus*_*nny 67 java android adapter android-activity

我有自定义适配器的ListActivity.在每个视图中,它可能有一些按钮,我需要在其中实现OnClickListener.我需要在适配器中实现OnClickListener.但是,我不知道如何调用函数如startActivity()或setResult().因为适配器不会扩展到Activity.

那么解决这个问题的最佳方法是什么?谢谢

Rob*_*ond 170

只需将当前Context传递给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(...);
             }
         });
     }
}
Run Code Online (Sandbox Code Playgroud)

  • 你可以像这样抛出上下文:((Activity)context).startActivityForResults(intent,0); (3认同)

cch*_*son 52

实施时onClickListener,您可以使用v.getContext.startActivity.

btn.setOnClickListener(new OnClickListener() {                  
    @Override
    public void onClick(View v) {
        v.getContext().startActivity(PUT_YOUR_INTENT_HERE);
    }
});
Run Code Online (Sandbox Code Playgroud)


edw*_*win 30

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);
             }
         });
     }
}
Run Code Online (Sandbox Code Playgroud)


Kam*_*ran 10

对于较新版本的sdk,您必须设置标志活动任务.

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