Jeg har noen fragmenter i min aktivitet
[1], [2], [3], [4], [5], [6]
Og på Tilbake-knappen må jeg trykke for å gå tilbake fra [2] til [1] hvis det nåværende aktive fragmentet er [2], eller ikke gjøre noe annet.
Hva er den beste fremgangsmåten for å gjøre det?
REDIGER: Programmet må ikke gå tilbake til [2] fra [3] ...[6].
Når du skifter mellom fragmenter, kaller du addToBackStack()
som en del av din FragmentTransaction
:
FragmentTransaction tx = fragmentManager.beginTransation();
tx.replace( R.id.fragment, new MyFragment() ).addToBackStack( "tag" ).commit();
Hvis du trenger mer detaljert kontroll (dvs. når noen fragmenter er synlige, vil du undertrykke tilbake-tasten) kan du sette en OnKeyListener
på den overordnede visningen av fragmentet ditt:
//You need to add the following line for this solution to work; thanks skayred
fragment.getView().setFocusableInTouchMode(true);
fragment.getView().requestFocus();
fragment.getView().setOnKeyListener( new OnKeyListener()
{
@Override
public boolean onKey( View v, int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
return true;
}
return false;
}
} );
Jeg vil heller gjøre noe som dette:
private final static String TAG_FRAGMENT = "TAG_FRAGMENT";
private void showFragment() {
final Myfragment fragment = new MyFragment();
final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);
transaction.addToBackStack(null);
transaction.commit();
}
@Override
public void onBackPressed() {
final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);
if (fragment.allowBackPressed()) { // and then you define a method allowBackPressed with the logic to allow back pressed or not
super.onBackPressed();
}
}
Jeg jobber med SlidingMenu og Fragment, presenterer saken min her og håper det hjelper noen.
Logikk når [Tilbake] -tasten trykkes:
Når SlidingMenu vises, lukk den, ikke flere ting å gjøre.
Eller når 2. (eller flere) Fragment vises, gå tilbake til forrige Fragment, og ikke flere ting å gjøre.
SlidingMenu vises ikke, gjeldende fragment er #0, gjør den opprinnelige [Tilbake]-tasten.
public class Main extends SherlockFragmentActivity
{
private SlidingMenu menu=null;
Constants.VP=new ViewPager(this);
//Noen ting...
@Override
public void onBackPressed()
{
if(menu.isMenuShowing())
{
menu.showContent(true); //Lukk SlidingMenu når menyen vises
return;
}
else
{
int page=Constants.VP.getCurrentItem();
if(page>0)
{
Constants.VP.setCurrentItem(page-1, true); //Vis forrige fragment til Fragment#0
return;
}
else
{super.onBackPressed();} } //Hvis SlidingMenu ikke vises og gjeldende fragment er #0, gjør den opprinnelige [Tilbake]-tasten det. I mitt tilfelle er exit fra APP
}
}
}