gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:00:37 26 4
gpt4 key购买 nike

我有一个 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/

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