【发布时间】:2019-05-04 08:52:44
【问题描述】:
我有一个 RecyclerView,其中项目包含一个使用 startActivityForResult 启动活动的按钮。 onClick 方法是在适配器内部实现的,并且在从新活动返回时,不会调用包含 RecyclerView 的片段的 onActivityResult。据我所知,这是意料之中的,因为 startActivityForResult 不是从此片段中调用的。
我找到的最接近解决方案的是: onActivityResult inside a RecyclerView.Adapter not being used
但是在尝试使用接口实现onClick方法时,我现在面临一个新问题:我不能在适配器内部调用onClick方法,虽然它是在活动内部实现的,因为适配器的上下文是静态的,并且该方法是非静态的。
以下是一些代码部分,可以更好地解释当前情况。我迫切需要一个替代解决方案,我真的一直在寻找。谢谢。
片段实现接口:
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);
}
});
【问题讨论】:
-
如果您从
getActivity()方法调用startActivityForResult,那么回调onActivityResult将由持有该片段的Activity 处理。如果您改为使用this.startActivityForResult(this对片段的引用),则回调将由实际启动活动的片段处理。
标签: java android android-recyclerview