Ich kann den Inhalt in ViewPager nicht aktualisieren.
Was ist die korrekte Verwendung der Methoden instantiateItem () und getItem () in der FragmentPagerAdapter-Klasse?
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. Außer ich kann den Inhalt nicht ändern.
Also fand ich Folgendes : ViewPager PagerAdapter aktualisiert die Ansicht nicht
"Mein Ansatz ist es, 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 wie ist die Beziehung zu getItem (int position)?
Ich habe die Referenz gelesen :
public abstract Fragment getItem (int position)
Gibt das Fragment zurück, das einer bestimmten Position zugeordnet ist.
public Object instantiateItem (ViewGroup-Container, int-Position)
Erstellen Sie die Seite für die angegebene Position. Der Adapter ist für das Hinzufügen der Ansicht zu dem hier angegebenen Container verantwortlich, muss jedoch nur sicherstellen, dass dies bis zum Zeitpunkt der Rückkehr von finishUpdate (ViewGroup) erfolgt. Parameter
container Die enthaltende Ansicht, in der die Seite angezeigt wird. position Die zu instanziierende Seitenposition.
Kehrt zurück
Gibt ein Objekt zurück, das die neue Seite darstellt. Dies muss keine Ansicht sein, kann aber auch ein anderer Container der Seite sein.
aber ich verstehe es immer noch nicht.
Hier ist mein Code. Ich verwende das Support Package 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