gpt4 book ai didi

java - 自定义 RecyclerAdapter 和 startActivityForResult

转载 作者:行者123 更新时间:2023-11-30 08:50:21 26 4
gpt4 key购买 nike

我有一个 Fragment,它包含一个使用自定义 RecyclerAdapterRecyclerView。我的自定义 RecyclerAdapter 中有一个 onClickListener - 当单击某个位置时,我希望它启动 startActivityForResult。到目前为止,它的工作原理是,当它被点击时,它会根据需要启动 Activity。但是,当我按下后退按钮转到包含 RecyclerViewFragment 时,永远不会调用 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_CODErequestCode,因为 Android 会自动转发它。

关于java - 自定义 RecyclerAdapter 和 startActivityForResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com