Мы можем вызвать 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 (); от фрагмента к адаптеру в качестве контекста.

Другие вопросы по тегам