![](/img/trans.png)
[英]How take image uri from my array declared in one fragment and pass it to other fragment?
[英]How to pass an object with an array of other objects from one fragment to another?
我有一個對象,我們稱其為Shop
,並且該對象具有一組稱為Offers
的對象。 我應該如何將Bundle
與我的對象一起使用,以將其從第一個片段發送到使用onClickListener
打開的片段?
Beeing Shop
,我需要解析的對象類似於:
public class Shop {
private String name;
private String schedule;
private String direction;
private List<Offer> Offers = new ArrayList<Offer>();
}
並Offer
類似的東西:
public class Offer {
private int packsAvailable;
private String description;
}
該函數調用第二個片段:
public void onClick(View v) {
Fragment shopping = new OffersDisplayFragment();
//Instantiate fragment
FragmentTransaction fragmentTransaction =
activity.getSupportFragmentManager()
.beginTransaction();
fragmentTransaction.replace(R.id.fragment, shopping);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
您可以通過添加一種方法來創建下一個片段的實例來實現它(我假設它是OffersDisplayFragment)。
將以下方法添加到您的片段中,以便我們可以使用bundle創建Fragment:
public class OffersDisplayFragment extends Fragment {
public static final String SHOP_EXTRA = "shopExtra";
// Creates a new fragment given a Shop
public static OffersDisplayFragment newInstance(Shop shop) {
OffersDisplayFragment fragment = new OffersDisplayFragment();
Bundle args = new Bundle();
args.putSerializable(SHOP_EXTRA, shop);
fragment.setArguments(args);
return fragment;
}
}
然后更新或創建片段的onCreate方法來處理捆綁包:
public class OffersDisplayFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get back arguments
Shop = (Shop) getArguments().getSerializable(SHOP_EXTRA);
// Do something with the Shop here
}
}
在這一點上,Android Studio將抱怨您的Shop
模型無法序列化。 這是預料之中的,因為我們尚未將Shop聲明為serializable
。 因此,將您的Shop and Offer更改為可序列化,如下所示:
public class Shop implements Serializable {
...
}
和
public class Offer implements Serializable {
...
}
現在,您可以在點擊偵聽器中使用捆綁創建片段,如下所示:
public void onClick(View v) {
Fragment shoppingFragment = OffersDisplayFragment.newInstance(shop);
...
// show the fragment with the fragment transaction.
}
找到Parcelable
解決方案后,請嘗試使用Parcelable
而不是Serializable
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.