有时我们在做ListView或ViewPage等控件的应用的时候,往往是要在在这些控件的Adapter里做事件监听的,但是在Adapter类里启动一个Intent是不能直接启动的,所以需要做一下这样的处理:
首先在当前运行的Activity里声明一个静态对象:public static MainActivity mActivity;
然后在其onCreate里的添加一句:mActivity=this;
然后这个时候就可以在Adapter类里面调用:
Toast.makeText(MainActivity.mActivity, "点击项", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.mActivity, A.class);
MainActivity.mActivity.startActivity(intent);
这样就可以实现想要的效果了。
adapter中无法使用startActivityForResult方法
但是从Activity类传进来的Context却无法调用startActivityForResult()。
最后在网上查了下,http://stackoverflow.com/questions/2848775/use-startactivityforresult-from-non-activity
方法是将从Activity传进来的Context类改为Activity类,Result的返回在原Activity中的onActivityResult()处理即可。
范例如下:
假设原Activity类为AActivity
假设BaseAdapter类为:
AAdapter extends BaseAdapter
在其构造方法中增加Activity变量:
public AAdapter(AActivty aActivity){
this.mActivity = aActivty
}
然后即可在需要的地方调用startActivityForResult:
this.mActivity.startActivityForResult(intent,requestCode);
在AActivity中则将this传入即可:
AAdapter aAdapter = new AAdapter(this);