如何将 ArrayList 从 Activity 传递到 Android 中的片段
How to Pass ArrayList from Activity to Fragment in Android
我有一个 MainActivity 和一个片段。我想要做的是将数组列表从我的主 activity 传递到我的片段。
在我的 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)"
您可以使用 Bundle
发送您的 ArrayList:
Bundle args = new Bundle();
args.putStringArrayList("array", mArrayList);
restaurantsFragment.setArguments(args);
您必须删除行:import android.support.v4.app.Fragment;
并将其更改为 import android.app.Fragment;
现在要解决您必须处理导入的问题。
要么使用 import android.app.Fragment
而不是 import android.support.v4.app.Fragment
或者像这样使用支持片段管理器更新应用的主要内容:
FragmentManager fragmentManager = getSupportFragmentManager().
但是您还必须更改 FragmentManager 本身的类型; import android.app.FragmentManager
到 import android.support.v4.app.FragmentManager;
@Kemo 我现在面临同样的错误我使用片段支持管理器而不是片段 manager.Now 它工作正常。
FragmentManager fragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
BlankFragment blankFragment = new BlankFragment();
fragmentTransaction.add(R.id.ll, blankFragment, "");
fragmentTransaction.commit();
这是因为您的 class RestaurantParcelableModel 没有实现 Parceable class。实施 parceable class 并覆盖所需的方法。
访问:http://www.vogella.com/tutorials/AndroidParcelable/article.html
你可以使用parceable或者serializabale来传递arraylist的对象
或者数组list.You可以从github的给定link中找到parceable的例子。
ParceableSample.zip download the zip file
您可以使用上面的 link 示例来传递数组列表或数组列表的对象。
我有一个 MainActivity 和一个片段。我想要做的是将数组列表从我的主 activity 传递到我的片段。
在我的 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)"
您可以使用 Bundle
发送您的 ArrayList:
Bundle args = new Bundle();
args.putStringArrayList("array", mArrayList);
restaurantsFragment.setArguments(args);
您必须删除行:import android.support.v4.app.Fragment;
并将其更改为 import android.app.Fragment;
现在要解决您必须处理导入的问题。
要么使用 import android.app.Fragment
而不是 import android.support.v4.app.Fragment
或者像这样使用支持片段管理器更新应用的主要内容:
FragmentManager fragmentManager = getSupportFragmentManager().
但是您还必须更改 FragmentManager 本身的类型; import android.app.FragmentManager
到 import android.support.v4.app.FragmentManager;
@Kemo 我现在面临同样的错误我使用片段支持管理器而不是片段 manager.Now 它工作正常。
FragmentManager fragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
BlankFragment blankFragment = new BlankFragment();
fragmentTransaction.add(R.id.ll, blankFragment, "");
fragmentTransaction.commit();
这是因为您的 class RestaurantParcelableModel 没有实现 Parceable class。实施 parceable class 并覆盖所需的方法。
访问:http://www.vogella.com/tutorials/AndroidParcelable/article.html
你可以使用parceable或者serializabale来传递arraylist的对象 或者数组list.You可以从github的给定link中找到parceable的例子。 ParceableSample.zip download the zip file
您可以使用上面的 link 示例来传递数组列表或数组列表的对象。