мы можем вызвать 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)