Передача пользовательского списка данных с помощью Bundle
Я разрабатываю простое приложение, которое содержит вкладку с фрагментом. Я застрял в том месте, где мне нужно передать данные в только что созданный фрагмент на tabselect.
У меня есть список списков моих пользовательских объектов класса:
List<List<NewsObjectClass>> myList;
Вот где я застрял:
public static class PlaceholderFragment extends ListFragment{
private static final String ARG_SECTION_NUMBER = "section_number";
public PlaceholderFragment(){
}
public static PlaceholderFragment newInstance(int sectionNumber, List<List<NewsObjectsClass>> data) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
// Here i want to pass my List<List<NewsObjectClass>> to the bundle
fragment.setArguments(args);
return fragment;
}
...
В частности, мне нужен способ передачи моего списка lsits myCustomObjects во фрагмент, чтобы я мог использовать его для адаптера lsitview.
Любые предположения о том, как передать этот тип данных, было бы здорово. Благодарю.
3 ответа
Сделай свой NewObjectClass
Parcelable
или же Serializable
а затем создать новый класс, эффективно, содержащий ваш список, а также Parcelable
или же Serializable
, Тогда используйте Bundle.putSerializable
(или же putParcelable
)
Или, проще, сделать NewObjectClass
Parcelable
затем используйте putParcelableArrayList
если вы можете сделать с ArrayList
вместо общего List
Или, проще всего, сделать NewObjectClass
Сериализуемый и использовать putSerializable
прохождение ArrayList<NewObjectClass>
так как ArrayList
является Serializable
В последнем случае, возможно, вам придется только implements
Serializable
в ваш класс.
В качестве альтернативы, если ваши данные кажутся большими, попробуйте сохранить их в Application
-приобретенный объект вместо. Вы расширяете Application
и тогда такой объект будет существовать все время, пока существует ваше приложение. Не забудьте зарегистрировать его в манифесте.
class MyApplication extends Application {
public static Object myData;
}
Или вы можете сделать с общими предпочтениями
PreferenceManager.getDefaultSharedPreferences().edit().putInt("a", 1).commit();
PreferenceManager.getDefaultSharedPreferences().getInt("a");
args.putParcelableArrayList(DATA_KEY, new ArrayList<>(data));
Использование putSerializable
способ передать ваш пользовательский список.
args.putSerializable(KEY, ArrayList<Type>);
и получить его, используя getSerializable
ArrayList<Type> list = (ArrayList<Type>) getArguments().getSerializable(KEY);
Или, что проще, сделайте NewObjectClass Serializable и используйте putSerializable, передавая ArrayList, потому что ArrayList является Serializable
К сожалению, в моем случае это не сработало. В итоге я преобразовал свой список массивов в строку (или строку JSON) и отправил
bundle.putString()
а затем во фрагменте проанализировал строку обратно в список массивов.