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