java - 在RecyclerView的Adapter中模仿 'onActivityResult'

标签 java android android-recyclerview

我有一个 RecyclerView,其中的项目包含一个使用 startActivityForResult 启动 Activity 的按钮。 onClick 方法是在适配器内部实现的,并且在从新 Activity 返回时不会调用包含 RecyclerView 的 fragment 中的 onActivityResult。据我所知,这是可以预料的,因为 startActivityForResult 没有从此 fragment 调用。

我发现的最接近解决方案的是: onActivityResult inside a RecyclerView.Adapter not being used

但是当尝试使用接口(interface)来实现 onClick 方法时,我现在面临一个新问题:我无法在适配器内部调用 onClick 方法,尽管它是在 Activity 内部实现的,因为 Adapter 的上下文是静态的,并且该方法是非静态的。

下面是一些代码部分,可以更好地解释当前情况。我迫切需要一个替代解决方案,我真的进行了彻底的搜索。谢谢。

fragment 实现接口(interface):

public class EditableOffersListFragment extends Fragment implements OnClickButtonListener { ...

    @Override
    public void onClickButton(View v, int position, ArrayList<Offer> offers) {
        Offer from_item = offers.get(position);

        Intent intent = new Intent(getActivity(), OfferDetailsPopupActivity.class);
        intent.putExtra("new", false);
        intent.putExtra("offer_fromRecycler", from_item);
        getActivity().startActivityForResult(intent, HTZ_ADD_OFFER);
    }
...}

界面(在单独的文件中):

public interface OnClickButtonListener {
    void onClickButton(View v, int position, ArrayList<Offer> offers);
}

在适配器内部:

            mEditOfferButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    OnClickButtonListener.onClickButton(v, getAdapterPosition(), mOffers);
                }
            });

最佳答案

我认为您当前面临的问题是您从包含当前 fragment 的Activity而不是 fragment 本身调用startActivityForResult。因此,使用 this 或只是简单地调用 startActivityForResult 将从 Fragment 而不是 Activity 和此 fragment 调用它将使用其他 Activity 的结果进行回调。

public class EditableOffersListFragment extends Fragment implements OnClickButtonListener { ...

    @Override
    public void onClickButton(View v, int position, ArrayList<Offer> offers) {
            Offer from_item = offers.get(position);

            Intent intent = new Intent(getActivity(), OfferDetailsPopupActivity.class);
            intent.putExtra("new", false);
            intent.putExtra("offer_fromRecycler", from_item);
            startActivityForResult(intent, HTZ_ADD_OFFER); // <--- Note that this line has changed
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Do your result handling here
    }
}

关于java - 在RecyclerView的Adapter中模仿 'onActivityResult',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55980953/

相关文章:

Java Swing - 如何使 JButton 的边界不可见?

java - 所有实例都相等的类的 HashCode 实现

java - JDBC ODBC 驱动程序连接

java - 完成加载监听器上的 WebView loadDataWithBaseURL

java - 点击操作栏中的搜索按钮时崩溃 (Android)

java - 在表格单元格中创建链接并通过单击打开 float 弹出窗口

android - 进度条 android,里面有文字

java - Android - requestFocus 关闭键盘

android - 为 Firebase RecyclerView 添加触摸监听器

android - Bottomsheet 总是隐藏我最后的 Recyclerview 元素