繁体   English   中英

将片段添加到后堆栈

[英]Adding Fragments to backstack

我试图通过按下单选按钮时切换片段来管理单个活动上的片段。 在每个替换操作中,我都调用addToBackStack()方法,但是当我按下“后退”按钮时,它将关闭活动,而不是转到上一个片段。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_flow);
    radioGroup = (RadioGroup) findViewById(R.id.rdoGrp);
    rdBtnHome = (RadioButton) findViewById(R.id.rdBtnHome);
    rdBtnSearch = (RadioButton) findViewById(R.id.rdBtnSearch);
    rdBtnShoot = (RadioButton) findViewById(R.id.rdBtnShoot);
    rdBtnUser = (RadioButton) findViewById(R.id.rdBtnUser);
    rdBtnAlarm = (RadioButton) findViewById(R.id.rdBtnAlarm);
    homeFragment = new HomeFragment();
    searchFragment = new SearchFragment();
    userFragment = new UserFragment();
    shootFragment = new ShootFragment();
    alarmFragment = new AlarmFragment();


 getSupportActionBar().setDisplayOptions(android.support.v7.app.ActionBar.DISPLAY_SHOW_CUSTOM);
    getSupportActionBar().setCustomView(R.layout.actionbar);

    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.frameLayoutMain, homeFragment);
    ft.addToBackStack(null);
    ft.commit();

    rdBtnHome.setChecked(true);


    // Creating once image loader configuration
    createImageLoaderConfiguration();

    // Defining footer radiogroup including radiogroup callback listener
    defineFooterRadioGroup();

    Log.d("Logged User", Me.meGetInstance().toString());
}


private void defineFooterRadioGroup() {


    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            switch (checkedId) {
                case R.id.rdBtnHome:
                    ft.replace(R.id.frameLayoutMain, homeFragment);
                    ft.addToBackStack(null);
                    ft.commit();
                    break;
                case R.id.rdBtnAlarm:
                    ft.replace(R.id.frameLayoutMain, alarmFragment);
                    ft.addToBackStack(null);
                    ft.commit();
                    break;
                case R.id.rdBtnSearch:
                    ft.replace(R.id.frameLayoutMain, searchFragment);
                    ft.addToBackStack(null);
                    ft.commit();
                    break;
                case R.id.rdBtnShoot:
                    ft.replace(R.id.frameLayoutMain, shootFragment);
                    ft.addToBackStack(null);
                    ft.commit();
                    break;
                case R.id.rdBtnUser:
                    ft.replace(R.id.frameLayoutMain, userFragment);
                    ft.addToBackStack(null);
                    ft.commit();
                    break;
            }

        }
    });

}
  1. 您应该将onBackPress()方法覆盖到activity中。
  2. 您将从堆栈中获取一个片段,并且可以从方法“ getBackStackEntryCount();”中检索该值。
  3. 在退出应用程序之前检查堆栈的大小。

像这样向活动的BackPressed侦听器中添加popBackStack()

 if (getSupportFragmentManager().getBackStackEntryCount() > 0) {

     getSupportFragmentManager().popBackStack();
 }

这是一种使用片段中的代码删除片段的方法。

public void removeMe() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment prevHistory = getFragmentManager()
            .findFragmentByTag("LOG_IN");
    if (prevHistory != null) {
        ft.remove(prevHistory);
    }
    ft.commit();

}

您需要调用removeMe方法。 因此,将“键侦听器”添加到“后退”按钮。

view.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if(keyCode==KeyEvent.KEYCODE_BACK){
                removeMe();
            }
            return true;
        }
    });

视图可以是任何东西。 如果需要全局解决方案,则该视图为片段的视图。

为了使此方法有效,您需要在添加或替换片段时向片段事务添加标签。

Fragment newFragment = new Fragment();
            ft.replace(R.id.fragment_container, newFragment, "The fragment tag goes here");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM