Non riesco ad aggiornare il contenuto in ViewPager.
Qual è l'uso corretto dei metodi instantiateItem () e getItem () nella classe FragmentPagerAdapter?
Stavo usando solo getItem () per istanziare e restituire i miei frammenti:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
Questo ha funzionato bene. Solo che non posso cambiare il contenuto.
Quindi ho trovato questo: ViewPager PagerAdapter non aggiorna la vista
"Il mio approccio è quello di utilizzare il metodo setTag () per qualsiasi vista istanziata nel metodo instantiateItem ()"
Ora voglio implementare instantiateItem () per farlo. Ma non so cosa devo restituire (il tipo è Object) e qual è la relazione con getItem (int position)?
Ho letto il riferimento :
abstract pubblico Fragment getItem (int position)
Restituisce il frammento associato a una posizione specificata.
public Object instantiateItem (contenitore ViewGroup, posizione int)
Crea la pagina per la posizione specificata. L'adattatore è responsabile per l'aggiunta della vista al contenitore indicato qui, anche se deve assicurarsi che ciò avvenga solo quando ritorna da finishUpdate (ViewGroup). parametri
container La vista contenente in cui verrà mostrata la pagina. position La posizione della pagina da istanziare.
ritorna
Restituisce un oggetto che rappresenta la nuova pagina. Non è necessario che sia una vista, ma può essere un altro contenitore della pagina.
ma ancora non capisco.
Ecco il mio codice Sto usando il pacchetto di supporto 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;
}
}
Qui c'è anche qualcuno con un problema simile, nessuna risposta http://www.mail-archive.com/android-developers@googlegroups.com/msg200477.html