美文网首页
Android 在非Activity的类中调用startActi

Android 在非Activity的类中调用startActi

作者: Mr_不靠谱_先森 | 来源:发表于2017-03-16 11:01 被阅读851次

    有时我们在做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);

    相关文章

      网友评论

          本文标题:Android 在非Activity的类中调用startActi

          本文链接:https://www.haomeiwen.com/subject/mfwdnttx.html