Я не могу обновить содержимое в ViewPager.
Как правильно использовать методы instantiateItem() и getItem() в классе FragmentPagerAdapter?
Я использовал только getItem() для создания экземпляров и возврата моих фрагментов:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
Это сработало хорошо. За исключением того, что я не могу изменить содержание.
Итак, я нашел это: ViewPager PagerAdapter не обновляет представление
"Мой подход заключается в использовании метода setTag() для любого экземпляра представления в методе instantiateItem()"
Теперь я хочу реализовать instantiateItem() для этого. Но я не знаю, что я должен вернуть (тип Object) и какова связь с getItem (int position)?
Я прочитал ссылку:
публичный абстрактный фрагмент getItem (int position)
Вернуть фрагмент, связанный с указанной позицией.
открытый объект instantiateItem (контейнер ViewGroup, позиция int)
Создайте страницу для данной позиции. Адаптер отвечает за добавление представления к указанному здесь контейнеру, хотя он должен только гарантировать, что это будет сделано к тому времени, когда он вернется из finishUpdate (ViewGroup). параметры
контейнер Содержащий вид, в котором будет отображаться страница. position Позиция страницы, которую нужно создать.
Возвращает
Возвращает объект, представляющий новую страницу. Это не обязательно должен быть View, но может быть какой-то другой контейнер страницы.
но я все еще не понимаю
Вот мой код. Я использую пакет поддержки v4.
ViewPagerTest
public class ViewPagerTest extends FragmentActivity {
private ViewPager pager;
private MyFragmentAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pager1);
pager = (ViewPager)findViewById(R.id.slider);
String[] data = {"page1", "page2", "page3", "page4", "page5", "page6"};
adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
pager.setAdapter(adapter);
((Button)findViewById(R.id.button)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
reload();
}
});
}
private void reload() {
String[] data = {"changed1", "changed2", "changed3", "changed4", "changed5", "changed6"};
//adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
adapter.setData(data);
adapter.notifyDataSetChanged();
pager.invalidate();
//pager.setCurrentItem(0);
}
}
MyFragmentAdapter
class MyFragmentAdapter extends FragmentPagerAdapter {
private int slideCount;
private Context context;
private String[] data;
public MyFragmentAdapter(FragmentManager fm, int slideCount, Context context, String[] data) {
super(fm);
this.slideCount = slideCount;
this.context = context;
this.data = data;
}
@Override
public Fragment getItem(int position) {
return new MyFragment(data[position], context);
}
@Override
public int getCount() {
return slideCount;
}
public void setData(String[] data) {
this.data = data;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
MyFragment
public final class MyFragment extends Fragment {
private String text;
public MyFragment(String text, Context context) {
this.text = text;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.slide, null);
((TextView)view.findViewById(R.id.text)).setText(text);
return view;
}
}
Вот также кто-то с подобной проблемой, без ответов http://www.mail-archive.com/[email protected]/msg200477.html