336 Stimmen

ViewPager dynamisch aktualisieren?

Ich kann den Inhalt im ViewPager nicht aktualisieren.

Was ist die korrekte Verwendung der Methoden instantiateItem() und getItem() in der Klasse FragmentPagerAdapter?

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

Also habe ich das hier gefunden: ViewPager PagerAdapter aktualisiert nicht die Ansicht

"Mein Ansatz besteht darin, 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 was ist die Beziehung zu getItem(int position)?

Ich habe die Referenz :

  • public abstract Fragment getItem (int position)

    Gibt das Fragment zurück, das mit einer bestimmten Position verbunden ist.

  • public Object instantiateItem (ViewGroup container, int position)

    Erstellen Sie die Seite für die angegebene Position. Der Adapter ist verantwortlich für das Hinzufügen der Ansicht zu dem hier angegebenen Container, obwohl er nur sicherstellen muss das dies von t Parameter

    container Die enthaltende Ansicht in w position Die Position der Seite, die instanziiert werden soll.

    Rückgabe

    Gibt ein Objekt zurück, das die neue Seite darstellt. Dies muss nicht unbedingt eine Ansicht sein, sondern kann auch ein anderer Container der Seite sein.

aber ich verstehe es immer noch nicht.

Hier ist mein Code. Ich verwende das Support-Paket 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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X