Ich kann den Inhalt im ViewPager nicht aktualisieren.
Was ist die korrekte Verwendung der Methoden instantiateItem() und getItem() in der Klasse FragmentPagerAdapter?
Ich habe nur getItem() verwendet, um meine Fragmente zu instanziieren und zurückzugeben:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
Das hat gut funktioniert. Aber ich kann den Inhalt nicht ändern.
Also habe ich das hier gefunden: ViewPager PagerAdapter aktualisiert nicht die Ansicht
"Mein Ansatz besteht darin, die setTag()-Methode für jede instanziierte Ansicht in der instantiateItem()-Methode zu verwenden.
Jetzt möchte ich instantiateItem() implementieren, um dies zu tun. Aber ich weiß nicht, was ich zurückgeben muss (der Typ ist Object) und was ist die Beziehung zu getItem(int position)?
Ich habe die Referenz :
public abstract Fragment getItem (int position)
Gibt das Fragment zurück, das mit einer bestimmten Position verbunden ist.
public Object instantiateItem (ViewGroup container, int position)
Erstellen Sie die Seite für die angegebene Position. Der Adapter ist verantwortlich für das Hinzufügen der Ansicht zu dem hier angegebenen Container, obwohl er nur sicherstellen muss das dies von t Parameter
container Die enthaltende Ansicht in w position Die Position der Seite, die instanziiert werden soll.
Rückgabe
Gibt ein Objekt zurück, das die neue Seite darstellt. Dies muss nicht unbedingt eine Ansicht sein, sondern kann auch ein anderer Container der Seite sein.
aber ich verstehe es immer noch nicht.
Hier ist mein Code. Ich verwende das Support-Paket 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;
}
}
Hier ist auch jemand mit einem ähnlichen Problem, keine Antworten http://www.mail-archive.com/Android-developers@googlegroups.com/msg200477.html