2015-08-13 7 views
1

Мое приложение имеет пейджер вида, включающий три фрагмента. Они управляются FragmentPagerAdapter.Хранение ArrayList <Object> в комплекте для использования фрагментом

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Fragment page adapter 
     mainFragmentPagerAdapter = new MainFragmentPagerAdapter(getSupportFragmentManager()); 

     // Set the view pagers adapter 
     ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
     viewPager.setAdapter(mainFragmentPagerAdapter); 

     // Set up the TabLayout using the view pager 
     TabLayout tabLayout = (TabLayout) findViewById(R.id.fixed_tabs); 
     tabLayout.setupWithViewPager(viewPager); 
} 

Все начинает усложняться, когда все эти фрагменты содержат RecyclerView, которые могут быть обновлены.

Чтобы правильно передавать данные на осколках, я использую метод newInstance показано ниже:

public static InformationFragment newInstance() { 
     Bundle arguments = new Bundle(); 
     // Put arguments here. 
     InformationFragment fragment = new InformationFragment(); 
     fragment.setArguments(arguments); 
     return fragment; 
} 

Я тогда другой метод внутри InformationFragment обновить аргументы при необходимости:

public void updateData() { 

    Bundle arguments = getArguments(); 
    // Put arguments 
    this.adapter.updateItems(items); 
} 

Данные, которые могут использоваться для заполнения RecyclerView, должны быть нескольких типов (некоторые андроиды, некоторые пользовательские). Поэтому у меня есть ArrayList<Object> items;, содержащий все мои объекты.

Мой вопрос в том, что является лучшим способом сохранить этот ArrayList в комплекте, чтобы его можно было использовать фрагментом?

Я могу сделать следующее, но он чувствует себя грязным:

public void updateData(ArrayList<Object> items) { 
     getArguments().putSerializable("items", items); 
     this.adapter.updateItems(items); 
    } 

, а затем получить по:

if (arguments.containsKey("items")) { 
      ArrayList<Object> items = (ArrayList<Object>)arguments.getSerializable("items"); 
} 

Или есть лучший подход?

ответ

0

Я бы рекомендовал НЕ хранить List<Object> и вместо этого разместить несколько списков в ваш комплект. Кроме того, размещение ваших объектов в пакете как сериализуемое действительно не так уж плохо, но если вы хотите сделать это, тем более андроидным способом вы можете реализовать интерфейс Parcelable для каждого объекта, который хранится внутри этого пакета.