мы можем вызвать startActivityForResult из адаптера? Как получить ответ?

возможно ли иметь метод startActivtyForResult в адаптере? Тогда как получить ответ? Где выполнить функцию обратного вызова?

Ответы

Ответ 1

Да, это возможно. Вам нужна ссылка для Context в адаптере и вызовите действие:

Intent intent = new Intent(context, TargetActivity.class);
((Activity) context).startActivityForResult(intent, REQUEST_FOR_ACTIVITY_CODE);

Остерегайтесь того, что контекст должен быть контекстом активности или этот код не будет работать.

Вы получите результат в приложении, используя onActivityResult, как обычно.

Итак, например:

В вашем адаптере:

MyAdapter(Context context) {
    mContext = context;
}

public View getView(int position, View convertView, ViewGroup parent) {
    …
    open.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            …
            Activity origin = (Activity)mContext;
            origin.startActivityForResult(new Intent(mContext, SecondActivity.class), requestCode);
        }   
    });
    …
}

public  void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d("MyAdapter", "onActivityResult");
}

Во втором упражнении сделайте как обычно setResult и finish.

В своем основном действии, захватите результат и передайте обратный вызов адаптера:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    mAdapter.onActivityResult(requestCode, resultCode, data);
}

Ответ 2

Да. Вы можете вызвать startactivityforresult() из адаптера.

1.Сообщение адаптера от активности и необходимость onActivityResult в деятельности. 2.Создание адаптера из фрагмента и необходимость onActivityResult в фрагменте.

Случай 1: Get OnActivityResult в действии, затем передайте ссылку на активность на конструктор адаптера

public MyAdapter(Activity pActivity, List<MyBean> pList) {
        mList = pList;
        mActivity = pActivity;       
    }

Теперь startActivityForResult

Intent intent = new Intent(context, TargetActivity.class);
mActivity.startActivityForResult(intent, REQUEST_FOR_ACTIVITY_CODE);

Случай 2: Get OnActivityResult в фрагменте, затем передайте ссылку фрагмента на конструктор адаптера

 public MyGamesAdapter(Fragment pContext, List<MyBean> pList,) {
        mList = pList;
        mMyFragment =pContext;
    }

 Intent intent = new Intent(context, TargetActivity.class);
    mMyFragment.startActivityForResult(intent, REQUEST_FOR_ACTIVITY_CODE);

Теперь в активности или фрагменте переопределите OnActivityResult и получите результат.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    mAdapter.onActivityResult(requestCode, resultCode, data);
}

Ответ 3

напишите functon в классе активности, подобном этому

public void startCommentActivity(Intent i){
    startActivityForResult(i, 100);
}

вызвать его в классе адаптера

mActivity.startCommentActivity(intent);

Ответ 4

(context as AddressListActivity).startActivityForResult(Intent(context, AddAddressActivity::class.java)