Я новичок в разработке Android, и я был бы очень признателен за помощь здесь.Обновление фрагментов из Activity в ViewPager
Я использую фрагмент, который содержит TextView, и я использую 5 экземпляров одного и того же класса MyFragment.
В этой операции у меня есть кнопка и ViewPager, и мне нужна кнопка для обновления содержимого экземпляров фрагментов, всякий раз, когда его щелкают.
Вот активность
public class MainActivity extends FragmentActivity {
final static String[] CONTENT = {"a", "b"};
ViewPager pager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<MyFragment> fragments = new Vector<MyFragment>();
for(int i = 0; i < 5; i++){
MyFragment fragment = new MyFragment(CONTENT);
fragments.add(fragment);
}
PagerAdapter adapter = new PagerAdapter(this.getSupportFragmentManager(), fragments);
pager = (ViewPager) findViewById(R.id.viewpager);
pager.setAdapter(adapter);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//method that isn't working
PagerAdapter adapter = (PagerAdapter)pager.getAdapter();
for(int i = 0; i < 5; i++){
MyFragment fragment = (MyFragment) adapter.getItem(i);
fragment.textView.setText(fragment.content[1]);
}
}
});
}
}
Обломок
public class MyFragment extends Fragment{
String[] content;
TextView textView;
public MyFragment(String[] content) {
this.content = content;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_content, container, false);
textView = (TextView) view.findViewById(R.id.textView1);
textView.setText(content[0]);
return view;
}
}
И FragmentPagerAdapter
public class PagerAdapter extends FragmentPagerAdapter{
List<MyFragment> fragments;
public PagerAdapter(FragmentManager fm, List<MyFragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int arg0) {
return fragments.get(arg0);
}
@Override
public int getCount() {
return fragments.size();
}
}
Метод OnClick дает мне NullPointerException всякий раз, когда я пытаюсь получить доступ фрагмент из адаптера который меньше, чем adapter.getCurrentItem() - 1 или больше, чем адаптер .getCurrentItem() + 1.
Любая идея о том, как обновлять все фрагменты одновременно?
Заранее спасибо.
Вы можете изменить текущий видимый и затем добавьте 'OnPageChangeListener' в' ViewPager' и обновите остальные дочерние фрагменты, когда пользователь проведет влево или вправо. – Luksprog
Это работает очень хорошо.Я реализовал onPageSelected, но остается только одна проблема, которая возникает при запуске прокрутки между страницами, пока я не выпущу следующий фрагмент, который не обновляется. Хотя это можно решить с помощью onScrollStateChanged, но пока ничего. Любое предложение? – Helios