Передача пользовательского списка данных с помощью 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 ответа

Решение

Сделай свой NewObjectClassParcelable или же Serializable а затем создать новый класс, эффективно, содержащий ваш список, а также Parcelable или же Serializable, Тогда используйте Bundle.putSerializable (или же putParcelable)

Или, проще, сделать NewObjectClassParcelable затем используйте putParcelableArrayList если вы можете сделать с ArrayList вместо общего List

Или, проще всего, сделать NewObjectClass Сериализуемый и использовать putSerializable прохождение ArrayList<NewObjectClass> так как ArrayList является Serializable

В последнем случае, возможно, вам придется только implementsSerializable в ваш класс.

В качестве альтернативы, если ваши данные кажутся большими, попробуйте сохранить их в 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()

а затем во фрагменте проанализировал строку обратно в список массивов.

Другие вопросы по тегам