Question

J'utilise un ViewPager pour implémenter le balayage dans mon application Android.Cependant, j'aimerais que le fragment précédent soit affiché lorsque l'utilisateur utilise le bouton Précédent au lieu de mettre fin à l'activité.Y'a-t'il un quelconque moyen d'y arriver?Merci Sebastian

Était-ce utile?

La solution

Remplacez la fonctionnalité de votre Activity:

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

public class Fragment extends Fragment
{

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

Autres conseils

J'ai eu un problème similaire, voici comment je l'ai résolu.J'avais un ViewPager avec 6 fragments et je voulais garder une trace de l'historique des pages et pouvoir utiliser le bouton Précédent pour naviguer en arrière dans l'historique.je crée un java.util.Stack<Integer> objet, ajoutez-y des numéros de fragment (sauf lorsque vous utilisez le bouton Précédent, voir ci-dessous) et remplacez onBackPressed() pour faire apparaître le dernier fragment visualisé au lieu d'utiliser la pile arrière, lorsque ma pile d'historique n'est pas vide.

Vous voulez éviter de pousser des éléments sur la pile lorsque vous appuyez sur le bouton retour, sinon vous resterez coincé entre deux fragments si vous continuez à utiliser le bouton retour, au lieu de finalement quitter.

Mon code :

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;
    }
};

Le dépassement de la méthode en dessous de l'activité de fragment devrait résoudre votre problème.

@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);
    }
}

J'ai le même problème et je suis cette étape ( édité ma réponse --- Travaillez certainement pour moi, donnez-lui un essai )

Dans l'activité principale où il y a 3 fragments dans la viewpager, je crée une pile et appuyez sur les données POINT et POP.

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) {
        }
    });
}

et dans l'activébacked in Activity,

//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 {
    }
}

J'espère que cela peut aider ou msg moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top