2012-08-09 65 views
26

是否有可能在adapter &范围内有方法onActivityResume致电startActivityForResult我们可以从适配器调用startActivityForResult吗?

+0

是的,你在适配器 – ckpatel 2012-08-09 11:59:22

+0

确保使用startActivityForResult我有一个列表视图即从适配器获取其内容。我有一个按钮在适配器上,点击按钮另一个活动将开始并返回一些东西 – napster 2012-08-09 12:08:18

+0

http://stackoverflow.com/questions/2497205/how-to-return-a-result-startactivityforresult-from-a-tabhost-activity它的一个complate例子与你的quastion相同.i它的帮助。所有最佳 – ckpatel 2012-08-09 12:10:59

回答

64

是的。只需将该活动的上下文传递给适配器的构造函数中的适配器(这里存储为mContext)。 在getView,只需拨打

((Activity) mContext).startActivityForResult(intent,REQUEST_FOR_ACTIVITY_CODE); 
+0

谢谢@ user936414。 – napster 2016-04-03 14:05:02

+1

我们如何确定这里的上下文始终是Activity的一个实例? – Asakura 2017-04-21 09:16:06

+0

@Asakura正如答案中提到的“只需将活动的上下文传递到适配器的构造函数中的适配器” - 您需要传递活动的上下文 – user936414 2017-05-15 05:06:01

4

不一定传递通过适配器的构造背景。您可以从父ViewGroup获取上下文。样品RecyclerView适配器:

Context mContext; 
@Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     mContext = parent.getContext(); 
     ... 
    } 

样品的ListView BaseAdapter

Context mContext; 
@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     mContext = parent.getContext(); 
     ... 
} 

并使用它,无论你想

((Activity) mContext).startActivityForResult(intent, REQUEST_FOR_ACTIVITY_CODE); 
+0

上下文没有startActivityForResult?你需要一个活动。 – Kenneth 2015-11-27 07:45:50

+0

您可以将mContext强制转换为Activity:'((Activity)mContext)' – eugeneek 2015-11-27 10:26:40

+1

我刚刚发现的一个问题是,如果您在Fragment中接收到结果,它将不会被传递。即使你调用super.onActivityResult(requestCode,resultCode,data);在你的活动中,它似乎没有把结果传递给你的片段。在进一步阅读这里:http://stackoverflow.com/questions/6147884/onactivityresult-not-being-called-in-fragment我发现你必须进行调用startActivityForResult没有任何活动。思考? – mparkes 2016-04-21 22:30:13

相关问题