Je ne peux pas mettre à jour le contenu de ViewPager.
Quelle est l'utilisation correcte des méthodes instantiateItem () et getItem () dans la classe FragmentPagerAdapter?
J'utilisais uniquement getItem () pour instancier et renvoyer mes fragments:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
Cela a bien fonctionné. Sauf que je ne peux pas changer le contenu.
J'ai donc trouvé ceci: ViewPager PagerAdapter ne met pas à jour la vue
"Mon approche consiste à utiliser la méthode setTag () pour toute vue instanciée dans la méthode instantiateItem ()"
Maintenant, je veux implémenter instantiateItem () pour le faire. Mais je ne sais pas ce que je dois retourner (le type est Object) et quelle est la relation avec getItem (int position)?
J'ai lu la référence :
public abstract Fragment getItem (int position)
Renvoie le fragment associé à une position spécifiée.
public Object instantiateItem (conteneur ViewGroup, position int)
Créez la page pour la position donnée. L'adaptateur est responsable de l'ajout de la vue au conteneur indiqué ici, mais il doit uniquement s'assurer que cela est fait au moment où il revient de finishUpdate (ViewGroup). Paramètres
container La vue contenant dans laquelle la page sera affichée. position La position de la page à instancier.
Retour
Renvoie un objet représentant la nouvelle page. Cela n'a pas besoin d'être une vue, mais peut être un autre conteneur de la page.
mais je ne comprends toujours pas.
Voici mon code. J'utilise le package de support 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;
}
}
Voici également quelqu'un avec un problème similaire, aucune réponse http://www.mail-archive.com/android-developers@googlegroups.com/msg200477.html