Domanda

Sto usando un ViewPager per implementare Swiping nella mia app Android.Tuttavia, vorrei che il frammento precedente venga visualizzato quando l'utente utilizza il pulsante Indietro invece di terminare l'attività.C'è un modo per farlo? Grazie Sebastian

È stato utile?

Soluzione

Override la funzionalità del Activity:

public class Activity extends Activity
{
    @Override
    public void onBackPressed()
    {
        // do stuff
        myFragment.onBackPressed();
    }
}

public class Fragment extends Fragment
{

    public void onBackPressed()
    {
        // do stuff
    }
}
.

Altri suggerimenti

Ho avuto un problema simile, questo è il modo in cui l'ho risolto.Ho avuto un viewpager con 6 frammenti e volevo tenere traccia della cronologia della pagina e poter utilizzare il pulsante Indietro per navigare indietro nella cronologia.Creo un oggetto java.util.Stack<Integer>, aggiungi i numeri di frammento ad esso (tranne quando si utilizza il pulsante Indietro, vedere sotto) e sovrascrivere onBackPressed() per renderlo pop L'ultima frammentazione vista invece di usare lo stack posteriore, quando la mia stack storica non è vuota.

Si desidera evitare di spingere gli elementi sullo stack Quando si preme il tasto Indietro, altrimenti si rimette in bloccarsi tra due frammenti se si continua a utilizzare il pulsante Indietro, invece di uscire.

Il mio codice:

MyAdapter mAdapter;
ViewPager mPager;
Stack<Integer> pageHistory;
int currentPage;
boolean saveToHistory;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mAdapter = new MyAdapter(getSupportFragmentManager());
    mPager = (ViewPager)findViewById(R.id.container);
    mPager.setAdapter(mAdapter);
    mPager.setOffscreenPageLimit(5);

    pageHistory = new Stack<Integer>();
    mPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
            if(saveToHistory)
                pageHistory.push(Integer.valueOf(currentPage));
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
    saveToHistory = true;
}

@Override
public void onBackPressed() {
    if(pageHistory.empty())
        super.onBackPressed();
    else {
        saveToHistory = false;
        mPager.setCurrentItem(pageHistory.pop().intValue());
        saveToHistory = true;
    }
};
.

L'annullamento del metodo inferiore nell'attività del frammento dovrebbe risolvere il problema.

@Override
public void onBackPressed() {
    if (mViewPager.getCurrentItem() == 0) {
        // If the user is currently looking at the first step, allow the system to handle the
        // Back button. This calls finish() on this activity and pops the back stack.
        super.onBackPressed();
    } else {
        // Otherwise, select the previous step.
        mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1);
    }
}
.

Ho lo stesso problema e seguo questo passaggio ( ha modificato la mia risposta --- certamente lavoro per me, dargli un tentativo )

Nell'attività principale in cui ci sono 3 frammenti in ViewPager I creazione di pila e push e pop dati.

private Stack<Integer> stackkk;
private ViewPager mPager;
private int tabPosition = 0;



    mTabLayout.setupWithViewPager(mPager);
    mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
    mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            tabPosition = tab.getPosition();
            mPager.setCurrentItem(tab.getPosition());

// here i have add the data into the stack in each tab click, as at first it will always be null so i add 0 position

            if (stackkk.empty())
                stackkk.push(0);

            if (stackkk.contains(tabPosition)) {
                stackkk.remove(stackkk.indexOf(tabPosition));
                stackkk.push(tabPosition);
            } else {
                stackkk.push(tabPosition);
            }
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            tabPositionUnselected = tab.getPosition();
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });
}
.

e nell'outbackpressa in attività,

//OnbackPress i have first taken out the last one as it already and
//selected by poping it out then only set to the pager.
@Override
public void onBackPressed() {
    if (stackkk.size() > 1) {
        stackkk.pop();
        mPager.setCurrentItem(stackkk.lastElement());
    } else {
    }
}
.

Spero che questo possa aiutare o msg me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top