Mise à jour ViewPager dynamiquement?

Je ne peux pas mettre à jour le contenu dans ViewPager.

Qu'est-ce que l'utilisation correcte des méthodes instantiateItem() et getItem() dans FragmentPagerAdapter classe?

J'ai été en utilisant seulement getItem() pour instancier et de retour de mes fragments:

@Override
public Fragment getItem(int position) {
    return new MyFragment(context, paramters);
}

Cela a bien fonctionné. Sauf que je ne peut pas changer le contenu.

J'ai donc trouvé ceci: ViewPager PagerAdapter pas la mise à jour de la Vue

"Mon approche est d'utiliser la setTag() méthode pour n'importe quel autre vue dans le instantiateItem() la méthode"

Maintenant, je veux mettre en œuvre instantiateItem() pour le faire. Mais je ne sais pas ce que j'ai à retourner (le type de l'Objet) et quel est le rapport avec getItem(int position)?

J'ai lu le référence:

  • public abstract Fragment getItem (int position)

    Retour le Fragment associé à une position spécifiée.

  • Objet public instantiateItem (ViewGroup container, int position)

    Créer la page pour la position donnée. La carte est responsable de l'ajout de la vue vers le conteneur est donnée ici, bien qu'il ne doit s'en assurer par le temps, elle retourne de finishUpdate(ViewGroup).
    Paramètres

    récipient contenant de la Vue dans laquelle la page sera affichée.
    la position la position de La page pour être instancié.

    Retourne

    Retourne un Objet représentant la nouvelle page. Ce ne doit pas être Vue, mais peut être un autre conteneur de la page.

mais je ne comprends toujours pas.

Voici mon code. Je suis d'utilisation d'un 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;
    }
}

Ici est aussi quelqu'un avec un problème similaire, pas de réponses
http://www.mail-archive.com/[email protected]/msg200477.html

  • Pour obtenir une meilleure compréhension des composants impliqués, il pourrait aider à lire mon tutoriel sur l'un des onglets de ViewPager avec séparés en arrière histoire de la navigation. Il est livré avec un exemple de travail sur GitHub et ressources supplémentaires: medium.com/@nilan/...
  • obtenu quelques stackoverflow.com/questions/40149039/...
  • Vous pouvez le vérifier sur ce exemple sur GitHub. J'espère que cet exemple vous permet de.
  • La bonne solution la plus simple: stackoverflow.com/a/35450575/2162226
InformationsquelleAutor Ixx | 2012-06-01