我们可以从适配器调用startActivityForResult吗?

时间:2012-08-09 11:57:35

标签: android adapter

是否可以在onActivityResume& {}中使用方法adapter。致电startActivityForResult

4 个答案:

答案 0 :(得分:84)

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

即可
((Activity) mContext).startActivityForResult(intent,REQUEST_FOR_ACTIVITY_CODE);

答案 1 :(得分:6)

不一定要传递给适配器构造函数中的上下文。您可以从父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);

答案 2 :(得分:2)

课外活动...

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit_transform(df['ingredients_str'])

0    28560
1    26783
2    10595
3    38379
4     2798
Name: encoding, dtype: int64

小心!

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

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

答案 3 :(得分:0)

//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时。