首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在片段安卓中处理onBack出版社

如何在片段安卓中处理onBack出版社
EN

Stack Overflow用户
提问于 2014-03-11 08:24:06
回答 3查看 2K关注 0票数 4

我的应用程序中有3个片段,如HomePage , Frag1 ,Frag2,Frag3,Frag4.

所以,我在我的应用程序.On中使用了导航抽屉(主页),我有一个网格视图,其中包含了所有四个片段的链接。如果用户从Homepage -> Frag1 -> Frag1.2 ->Frag1.3 ->HomePage.导航

所以,onBack按下,我想显示前面的片段,但是一旦用户进入主页,如果他按下后页,我想关闭我的应用程序,我不知道我们如何做到这一点。

这就是我如何调用导航抽屉中的片段

代码语言:javascript
复制
protected void getUrl(int position) {
        FragmentTransaction fragTran = getSupportFragmentManager()
                .beginTransaction();
        switch (position) {
        case 0:
            fragTran.replace(R.id.content_frame, dashboardFragment);
            fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            // fragTran.addToBackStack(null);
            fragTran.commit();
            break;
        case 1:

            if (CommonUtils.isNetworkConnected(getApplicationContext())) {
                fragTran.replace(R.id.content_frame, frag1);
                fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                fragTran.addToBackStack(null);
                fragTran.commit();

            } else {
                Toast.makeText(getApplicationContext(),
                        "No Network Connection", Toast.LENGTH_LONG).show();
            }
            break;
        case 2:

            if (CommonUtils.isNetworkConnected(getApplicationContext())) {
                fragTran.replace(R.id.content_frame, frag2);
                fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                fragTran.addToBackStack(null);
                fragTran.commit();

            } else {
                Toast.makeText(getApplicationContext(),
                        "No Network Connection", Toast.LENGTH_LONG).show();
            }
            break;
        case 3:
            if (CommonUtils.isNetworkConnected(getApplicationContext())) {
                fragTran.replace(R.id.content_frame, frag3);
                fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                fragTran.addToBackStack(null);
                fragTran.commit();

            } else {
                Toast.makeText(getApplicationContext(),
                        "No Network Connection", Toast.LENGTH_LONG).show();
            }

            break;



        default:
            // return "";
        }
    }

这是我从GridView onClick :调用的方式。

代码语言:javascript
复制
final FragmentTransaction fragTran = getFragmentManager()
                .beginTransaction();

        gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View v, int arg2,
                    long arg3) {
                if (DASHBOARD_LINKS[arg2].equals("frag1")) {
                    if (CommonUtils.isNetworkConnected(getActivity())) {
                        fragTran.replace(R.id.content_frame,
                                frag1);
                        fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                        fragTran.addToBackStack(null);
                        fragTran.commit();
                    } else {
                        Toast.makeText(getActivity(), "No Network Connection",
                                Toast.LENGTH_LONG).show();
                    }
                }
                if (DASHBOARD_LINKS[arg2].equals("frag2")) {
                    fragTran.replace(R.id.content_frame, frag2);
                    fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    fragTran.addToBackStack(null);
                    fragTran.commit();
                }
                if (DASHBOARD_LINKS[arg2].equals("frag3")) {
                    fragTran.replace(R.id.content_frame, frag3);
                    fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    fragTran.addToBackStack(null);
                    fragTran.commit();
                }
            }
        });
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-13 11:36:27

添加这样的片段:

代码语言:javascript
复制
int count = fragmentManager.getBackStackEntryCount();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_frame, dashboardFragment)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .addToBackStack(String.valueOf(count))
        .commit();

然后,当您单击网格时,只需添加它们,如上面所示。但是,如果您单击导航抽屉中的项目,请先这样做:

代码语言:javascript
复制
fragmentManager.popBackStackImmediate("0", 0); // "0" here is a tag of transaction you added before. "0" is for first added fragment (your home fragment, I assume). You can pop back stack to second with "1", if you like

这将清除以前的片段的记忆,你将不会回到他们的“回”按。

最后,在您的活动中实现这一点:

代码语言:javascript
复制
@Override
public void onBackPressed() {
    if (fragmentManager.getBackStackEntryCount() <= 1) {
        finish();      
        return;
    }
    super.onBackPressed();
}

这将完成你的应用程序,如果你是在你的第一个家庭碎片。

票数 6
EN

Stack Overflow用户

发布于 2014-03-11 08:31:07

只需使用addToBackStack(null);

代码语言:javascript
复制
 fragTran.replace(R.id.content_frame, dashboardFragment);
        fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
         fragTran.addToBackStack(null);
        fragTran.commit();

因此,一旦使用addToBackStack(null)添加了新的片段,它将将实例保存到内存中,然后按下回放,它将弹出当前片段并加载前一个片段。

票数 2
EN

Stack Overflow用户

发布于 2014-03-11 08:30:22

您可以为每个片段类分别设置静态标志。&在片段活动中的片段值检查值的背面。&根据该调用,执行操作的片段类的反向按方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22320044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档