Nie mogę zaktualizować zawartości w ViewPager.
Jakie jest prawidłowe użycie metod instantiateItem () i getItem () w klasie FragmentPagerAdapter?
Używałem tylko metody getItem () do tworzenia instancji i zwracania moich fragmentów:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
To działało dobrze. Tyle że nie mogę zmienić treści.
Więc znalazłem to: ViewPager PagerAdapter nie aktualizuje widoku
„Moje podejście polega na użyciu metody setTag () dla dowolnego utworzonego widoku w metodzie instantiateItem ()”
Teraz chcę zaimplementować instantiateItem (), aby to zrobić. Ale nie wiem, co muszę zwrócić (typ to Object) i jaka jest relacja z getItem (pozycja int)?
Przeczytałem referencję :
public abstract Fragment getItem (pozycja wewnętrzna)
Zwraca Fragment powiązany z określoną pozycją.
public Object instantiateItem (kontener ViewGroup, pozycja int)
Utwórz stronę dla danej pozycji. Adapter jest odpowiedzialny za dodanie widoku do podanego tutaj kontenera, ale musi tylko upewnić się, że zostanie to zrobione do czasu powrotu z finishUpdate (ViewGroup). Parametry
kontener Zawierający widok, w którym strona będzie wyświetlana. pozycja Pozycja strony, która ma zostać utworzona.
Zwroty
Zwraca obiekt reprezentujący nową stronę. To nie musi być Widok, ale może to być inny kontener strony.
ale wciąż tego nie rozumiem.
Oto mój kod. Korzystam z pakietu wsparcia 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;
}
}
Oto także ktoś z podobnym problemem, brak odpowiedzi http://www.mail-archive.com/android-developers@googlegroups.com/msg200477.html