ViewPager dynamisch aktualisieren?

Ich kann den Inhalt in ViewPager nicht aktualisieren.

Eine Frage: In welcher Beziehung stehen die Methoden instantiateItem () und getItem () in der FragmentPagerAdapter-Klasse und werden sie korrekt verwendet?

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 wie gesagt, ich kann den Inhalt nicht ändern).

Also habe ich folgendes gefunden:ViewPager PagerAdapter aktualisiert die Ansicht nicht

Insbesondere eine, in der es um die Methode instantiateItem () geht:

"Mein Ansatz ist es, die setTag () - Methode für jede instanziierte Ansicht in der instantiateItem () - Methode zu verwenden."

Deshalb möchte ich jetzt instantiateItem () implementieren, um das zu tun. Aber ich weiß nicht, was ich dort zurückgeben muss (return is Object) und in welcher Beziehung steht getItem (int position)?

Momentan benutze ich getItem, um das Fragment zu instanziieren. Ist das falsch? Aber muss ich dann die Fragmente in die Instanzvariable setzen oder getItem () überhaupt nicht implementieren ...? Ich verstehe es einfach nicht.

Ich habe versucht, das zu lesenReferenz:

public abstract Fragment getItem (int position)

Gibt das Fragment zurück, das einer angegebenen 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. Er muss jedoch nur sicherstellen, dass dies zum Zeitpunkt der Rückgabe 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, sondern kann ein anderer Container der Seite sein.

... aber ich verstehe immer noch nicht, wie sie zusammenhängen und was ich tun muss.

Hier ist mein Code. Ich benutze 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/[email protected]/msg200477.html

Antworten auf die Frage(19)

Ihre Antwort auf die Frage