![](/img/trans.png)
[英]How to use onActivityResult in RecyclerView.Adapter
[英]Imitate 'onActivityResult' inside an Adapter of RecyclerView
我有一個RecyclerView,其中的項目包含一個使用startActivityForResult啟動活動的按鈕。 onClick方法在適配器內部實現,並且從新活動返回時未調用包含RecyclerView的片段的onActivityResult。 據我所知,這是可以預料到的,因為沒有從這個片段中調用startActivityForResult。
我發現的最接近解決方案的是: 不使用RecyclerView.Adapter中的onActivityResult
但是當我嘗試使用接口來實現onClick方法時,我現在面臨一個新問題:我無法調用適配器內的onClick方法,雖然它是在activity中實現的,因為Adapter的上下文是靜態的,方法是非靜態的。
下面是一些代碼部分,以更好地解釋當前的情況。 我迫切需要一種替代解決方案,我真的一直在尋找。 謝謝。
該片段實現了接口:
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);
}
});
我認為你目前面臨的問題是你從包含當前片段的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
}
}
好的,終於解決了。
有用的是將一個OnClickButtonListener成員添加到Adapter,它從Adapter的構造函數中的Fragment傳遞(Fragment正在實現OnClickButtonListener,所以我只是將'this'傳遞給構造函數)。
這樣,適配器中執行的所有操作都在OnClickButtonListener的實例上,並且解決了靜態/非靜態問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.