39

是否可以onActivityResumeadapter& 调用中有方法startActivityForResult

4

4 回答 4

102

是的。只需在适配器的构造函数(此处存储为 mContext)中将活动的上下文传递给适配器。在 getView 中,只需调用

((Activity) mContext).startActivityForResult(intent,REQUEST_FOR_ACTIVITY_CODE);
于 2012-08-09T12:03:08.443 回答
9

不一定要在适配器的构造函数中传递上下文。您可以从父 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);
于 2015-11-23T04:39:05.277 回答
2

业余...

((Activity) context).startActivityForResult(intent, 911);

小心!!

仅将MyActivity.this从活动传递到适配器作为上下文。

只通过getActivity();从片段到适配器作为上下文。

于 2018-08-16T13:05:49.760 回答
2
//First Do
public Activity context;
public int REQUEST_CODE = 111;

public Adapter(Activity context, Data data) {
    this.context = context;
}

///Second Do
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, NextActivity.class);
            context.startActivityForResult(intent, REQUEST_CODE);
        }
    });
}

如果您遵循此代码,那么您不需要每次都编写它 - ((Activity) context) - 之前 - .startActivityForResult(intent, REQUEST_CODE); - 当您在适配器中使用 startActivityForResult 时。

于 2020-11-11T13:45:45.040 回答