Мы можем вызвать startActivityForResult из адаптера?
Возможно ли иметь метод onActivityResume
в adapter
& вызов startActivityForResult
?
3 ответа
Да. Просто передайте контекст действия адаптеру в конструкторе адаптера (здесь он хранится как mContext). В getView просто позвоните
((Activity) mContext).startActivityForResult(intent,REQUEST_FOR_ACTIVITY_CODE);
Не обязательно передавать для передачи контекста в конструкторе адаптера. Вы можете получить контекст из родительской 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);
//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 в адаптере.
Offcource...
((Activity) context).startActivityForResult(intent, 911);
Осторожно!
MyActivity.this передается только от действия к адаптеру в качестве контекста.
Только передать getActivity (); от фрагмента к адаптеру в качестве контекста.