簡體   English   中英

如何將帶有其他對象數組的對象從一個片段傳遞到另一個片段?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM