【问题标题】:How to Pass ArrayList from Activity to Fragment in Android如何在 Android 中将 ArrayList 从 Activity 传递到 Fragment
【发布时间】:2016-09-29 09:34:58
【问题描述】:

我有一个 MainActivity 和一个片段。我想要做的是将数组列表从我的主要活动传递给我的片段。

在我的 MainActivity 中,我的代码如下所示:

private final List<RestaurantParcelableModel> restaurantList = new ArrayList<>();
...
RestaurantsFragment restaurantsFragment = new RestaurantsFragment();
        Bundle args = new Bundle();
        args.putParcelableArrayList("restaurantList", (ArrayList<? extends Parcelable>) restaurantList);
        restaurantsFragment.setArguments(args);

        FragmentManager fragmentManager = getFragmentManager();
        android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.restaurants_list, restaurantsFragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();

现在我在 fragmentTransaction.replace(R.id.restaurants_list, restaurantsFragment); - “错误的第二个参数类型。找到:'com.test.restaurants.sliderfragments.RestaurantsFragment',需要:'android.app.Fragment' 无法应用 FragmentTransaction 中的 replace (int, android.app.Fragment) 到 (int, com.test.restaurants.sliderfragments.RestaurantsFragment)"

【问题讨论】:

  • 您的RestaurantsFragment 扩展Fragment 是否正确?
  • 还要确保RestaurantParcelableModel 实现Parcelable。因为这种类型的铸造 - (ArrayList&lt;? extends Parcelable&gt;) restaurantList 是安静的危险。
  • 两个片段都使用 import android.app.Fragment# ??
  • 在这种特殊情况下,您的片段必须扩展 android.app.Fragment 而不是 android.support.v4.app.Fragment;
  • 然后用getSupportFragmentManager()代替getFragmentManager()

标签: java android android-fragments arraylist fragmenttransaction


【解决方案1】:

@Kemo 我现在面临同样的错误我使用片段支持管理器而不是片段管理器。现在它工作正常。

        FragmentManager fragmentManager = getSupportFragmentManager();
        android.support.v4.app.FragmentTransaction fragmentTransaction = 
        fragmentManager.beginTransaction();
        BlankFragment blankFragment = new BlankFragment();
        fragmentTransaction.add(R.id.ll, blankFragment, "");
        fragmentTransaction.commit();

【讨论】:

    【解决方案2】:

    这是因为您的类 RestaurantParcelableModel 没有实现 Parceable 类。实现 parceable 类并覆盖所需的方法。

    访问:http://www.vogella.com/tutorials/AndroidParcelable/article.html

    【讨论】:

      【解决方案3】:

      现在要解决您必须处理导入的问题。

      使用import android.app.Fragment 代替import android.support.v4.app.Fragment

      或者使用支持片段管理器更新应用的主要内容,如下所示:

      FragmentManager fragmentManager = getSupportFragmentManager(). 
      

      但是您还必须更改 FragmentManager 本身的类型; import android.app.FragmentManagerimport android.support.v4.app.FragmentManager;

      【讨论】:

      • @Kemo 希望对您有所帮助:)
      • 它做到了 :) 谢谢 Sanoop。我使用 import android.app.Fragment 而不是 import android.support.v4.app.Fragment。
      • 我也尝试过使用 getSupprotFragmentManager(),但我得到了这个错误:“无法解析符号 FragmentTransaction”在我的代码中:FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.restaurantss_list, restaurantsFragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit();
      • 也更改这些导入.. @Kemo For Transaction
      • 我做了,android.support.v4.app.FragmentTransaction,但它显示为“未使用的导入语句”
      【解决方案4】:

      您可以使用Bundle 发送您的ArrayList:

      Bundle args = new Bundle();
      args.putStringArrayList("array", mArrayList);
      restaurantsFragment.setArguments(args);
      

      【讨论】:

        【解决方案5】:

        你必须删除行:import android.support.v4.app.Fragment; 并将其更改为import android.app.Fragment;

        【讨论】:

          【解决方案6】:

          你可以使用parceable或serializabale来传递arraylist的对象 或数组列表。您可以从github的给定链接中找到parceable的示例。 ParceableSample.zip download the zip file

          您可以使用上面的链接示例来传递数组列表或数组列表的对象。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-02-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-20
            相关资源
            最近更新 更多