我有一个 Fragment
,其中包含一个 RecyclerView
,它使用自定义的 RecyclerAdapter
。我的自定义 RecyclerAdapter
中有一个 onClickListener
- 当单击某个位置时,我希望它启动 startActivityForResult
。到目前为止,它的工作原理是,当单击它时,它会根据需要启动 Activity 。但是,当我按后退按钮转到包含 RecyclerView
的 Fragment
时,永远不会调用 onActivityResult
。我已将上下文传递给自定义 RecyclerAdapter
。这是可能的事吗?或者启动 startActivityForResult
的 Activity/Fragment 是否是拦截它的那个?如果不是,我最终将使用手势检测器或类似的东西来处理 fragment 中的 onClick,但在此之前我想给它一个公平的破解!注意:我已将 onActivityResult
包含在具有 Fragment
容器的 MainActivity
中,因此 Fragment
确实会接收 onActivityResult
如果 startActivityForResult
是从 Fragment
发起的。我的代码:
RecyclerAdapter onClickListener:
@Override
public void onClick(View v) {
String titleId = titlesListDataArrayList.get(getLayoutPosition()).getTitle_id();
Intent intent = new Intent(context, CreateItemsActivity.class);
intent.putExtra("TITLE_ID", titleId);
((Activity) context).startActivityForResult(intent, Constants.NEW_ITEMS_REQUEST_CODE);
}
CreateItemsActivity.class - onBackPressed()
@Override
public void onBackPressed() {
Intent intent = new Intent();
setResult(Constants.NEW_ITEMS_REQUEST_CODE, intent);
finish();
}
MyListsFragment.class(包含RecyclerView)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("CALLED", "OnActivity Result");
// if requestCode matches from CreateItemsActivity
if (requestCode == Constants.NEW_ITEMS_REQUEST_CODE) {
Log.e("REQUEST CODE", String.valueOf(requestCode));
populateRecyclerView();
}
}
我在 MainActivity 中也有这个:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// included to allow fragment to receive onActivityResult
}
最佳答案
您的调用 Activity onActivityResult
仅当第二个 Activity 完成且 setResult
已执行时才会被调用。
由于用户点击后退按钮,第二个 Activity 将在没有调用 setResult
的情况下完成。
您需要重写 onBackPressed
以便执行 setResult
代码。
我看到您已经实现了这一点,但我认为问题的关键是您需要返回 Activity.RESULT_OK
而不是您的请求代码。
@Override
public void onBackPressed() {
Intent intent = new Intent();
setResult(RESULT_OK, intent);
super.onBackPressed();
}
在这种情况下,您不需要显式返回 Constants.NEW_ITEMS_REQUEST_CODE
的 requestCode
,因为 Android 会自动转发该内容。
关于java - 自定义 RecyclerAdapter 和 startActivityForResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010241/