2015-08-19 149 views
2

我有一个片段活动,从哪里可以开始我的片段,其中包含viewpager。在我的片段活动中,我添加了这段代码。后退按钮不起作用

fragment = new ItemPagerFragment(); 
FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction transaction = fragmentManager.beginTransaction(); 
transaction.replace(R.id.content_frame, fragment); 
transaction.addToBackStack(null); 
transaction.commit(); 

现在,当我按下后退按钮,只有空白屏幕出现,它不会导致我的片段活动。 我可能会做什么错?

回答

1

尝试这种方式,

    // Create new fragment and transaction 
        Fragment newFragment = new ItemPagerFragment(); 
        // consider using Java coding conventions (upper first char class names!!!) 
        FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
        // Replace whatever is in the fragment_container view with this fragment, 
        // and add the transaction to the back stack 
        transaction.replace(R.id.content_frame, newFragment); 
        transaction.addToBackStack(null); 
        // Commit the transaction 
        transaction.commit(); 

修改代码

@Override 
public void onBackPressed() { 
    if(some condition) { 
     // do something 
    } else { 
     super.onBackPressed(); 
    } 
} 

请点击此链接 Handling back button press Inside Fragments

0

你必须告诉片段管理器后退按钮被按下。对持有片段活动的Activity

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() == 0) { 
     super.onBackPressed();  
    } else { 
     getFragmentManager().popBackStack(); 
    } 
} 
1

使用此覆盖onBackPressed

@Override 
public void onBackPressed() { 
    if (fragmentManager.getBackStackEntryCount() > 1) { 
     fragmentManager.popBackStack(); 
    } else 
     finish(); 
} 
0
private void changeFragment (Fragment fragment){ 


    String backStackName = fragment.getClass().getName(); 

    FragmentManager manager = getSupportFragmentManager(); 
    boolean fragmentPopped = manager.popBackStackImmediate (backStackName, 0); 

    if (!fragmentPopped){ //fragment not in back stack, create it. 
    FragmentTransaction ft = manager.beginTransaction(); 
    ft.replace(R.id.content_frame, fragment); 
    ft.addToBackStack(backStackName); 
    ft.commit(); 
    } 
} 
0

当启动片段将标签分配给每个fragment.When要返回按使用指定的标签名检查的片段的存在,然后做相应的action.for例如:

private final static String TAG_FRAGMENT = "TAG_FRAGMENT"; 
//when want to add fragment to view 
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(); 
} 
//in activity back pressed check the existence of fragment by TAG 
@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(); 
    } 
}