我的Fragment
包含使用自定义RecyclerView
的{{1}}。我的自定义RecyclerAdapter
中有一个onClickListener
- 当点击一个位置时,我希望它开始RecyclerAdapter
。到目前为止,这样可以在点击它时根据需要启动Activity。但是,当我按后退按钮转到包含startActivityForResult
Fragment
的{{1}}时,从未调用过。我已将上下文传递给自定义RecyclerView
。这是可能的吗?或者,活动/片段发起onActivityResult
是否会截获它?如果不是,我将最终使用手势检测器或类似的东西处理片段中的onClick,但在此之前我想给这个公平的裂缝!注意:我已在RecyclerAdapter
包含startActivityForResult
包含onActivityResult
容器,以便MainActivity
确实收到Fragment
如果从Fragment
启动onActivityResult
startActivityForResult
。我的代码:
RecyclerAdapter onClickListener:
Fragment
CreateItemsActivity.class - onBackPressed()
@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);
}
MyListsFragment.class(包含RecyclerView)
@Override
public void onBackPressed() {
Intent intent = new Intent();
setResult(Constants.NEW_ITEMS_REQUEST_CODE, intent);
finish();
}
我在MainActivity中也有这个:
@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();
}
}
答案 0 :(得分:1)
只有在第二个活动完成并且onActivityResult
已执行时,才会调用您的呼叫活动setResult
。
由于用户正在按下后退按钮,因此第二个活动正在完成而不会调用setResult
。
您需要覆盖onBackPressed
,以便执行setResult
代码。
我发现您已经实现了这一点,但我认为问题的症结在于您需要返回Activity.RESULT_OK
而不是您的请求代码。
@Override
public void onBackPressed() {
Intent intent = new Intent();
setResult(RESULT_OK, intent);
super.onBackPressed();
}
在这种情况下,您不需要明确返回requestCode
Constants.NEW_ITEMS_REQUEST_CODE
因为Android会自动转发。{/ p>
答案 1 :(得分:1)
好的,所以如果有其他人在这里有这个问题,我的
溶液。我将此代码添加到MainActivity onActivityResult中(注意我有一个框架容器,这是所有碎片都被充气的地方):
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// get current fragment in container
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frameContainer);
fragment.onActivityResult(requestCode, resultCode, data);
}
我相信这是有效的,因为MainActivity在层次结构中排名第一,并截获onActivityResult,所以基本上我只是将它指向我希望它被使用的位置。