Element entfernen + Blättern zur Nächsten im Android ViewPager

Ich habe eine Aktivität mit einem ViewPager, dass zeigt die N-Fragmente. Jedes fragment ist, in dem die Eigenschaften eines Objekts aus einer ArrayList in mein ViewPager die benutzerdefinierten adapter (erweitert FragmentStatePagerAdapter).

Fragment hat (unter anderem) einen button, der sollte entfernen Sie die aktuell angezeigte fragment und Blättern Sie zu der nächsten mit setCurrentItem(position, true) so, dass, wenn der Benutzer blättert zurück, das Vorherige Element ist verschwunden. Ich dies tun, indem Sie etwas wie folgt aus (vereinfacht):

deleteButton.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

              MyActivity parentActivity = (MyActivity)getActivity();

              //First, scroll to next item (smoothly)
              parentActivity.pager.setCurrentItem(parentActivity.pager.getCurrentItem()+1, true); 

              //Database stuff...
              doSomeDBOperations();

              //Method in Activity that removes the current object (I believe this method is working fine and yes, it calls notifyDataSetChanged())
              parent.removeObject(currentObject);

    }
});

Dies ist das gewünschte Verhalten, wie das Objekt, vertreten durch das fragment, dessen löschen-Schaltfläche gedrückt wurde, wird entfernt, und der viewpager geht auf der nächsten Seite.

Mein problem ist, dass der ViewPager nicht scrollen flüssig, sondern "springt sofort auf das nächste fragment. Wenn ich den Kommentar der removeObject() nennen, die smooth scroll funktioniert (aber das Element nicht entfernt). Ich glaube, es hat etwas zu tun mit der removeObject() wird aufgerufen, bevor die setCurrentItem() beendet wurde, die smooth-scrolling-animation?

Irgendwelche Ideen auf, wie man dieses Problem beheben und erreichen Element entfernen + glatte scrollen? Wenn meine Annahme richtig ist, wie kann ich sicherstellen, dass ich den glatten Blättern Sie zu beenden, bevor Sie Sie entfernen das Objekt?

EDIT 1:

Meine Vermutung scheint richtig. Wenn ich die parent.removeObject(currentObject) innen

//...inside the previously shown public void onClick(View v)...
confirm.postDelayed(new Runnable() {

    @Override
    public void run() {
              //Method in Activity that removes the current object (I believe this method is working fine and yes, it calls notifyDataSetChanged())
              parent.removeObject(currentObject);
    }
}, 1000);

so, dass die removeObject() Anruf wartet für eine Sekunde, es funktioniert wie erwartet: führen Sie einen Bildlauf zum nächsten Element, entfernen Sie die alte. Aber das ist eine sehr hässliche workaround also ich würde noch gerne einen besseren Ansatz.

EDIT 2:

Ich dachte, eine mögliche Lösung (siehe unten).

InformationsquelleAutor user1987392 | 2013-10-28
Schreibe einen Kommentar