zoukankan      html  css  js  c++  java
  • Fragment-按返回键程序退出

    今天在做fragment的时候,发现一个问题,当我的界面停留在fragment的时候,按物理返回键,这时候会推出整个应用。这当然不是我们期望的,我们期望按返回键以后,应用界面返回添加fragment之前的界面。后来就在网上查了相关的方法,发现有个关于入栈的概念,现在记录如下。

    一下文章参考 http://blog.csdn.net/lmj623565791/article/details/37992017 这个博客感觉很厉害,写的东西很好

    我们先看下没有做处理的时候,fragment按返回键的结果

    作为实例,我们创建三个fragment,他们就是显示三个不同的字符串,就不一一列出了。

    package com.example.test1123;
    
    import android.app.Fragment;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.ListView;
    
    public class HistoryFragmentTwo extends Fragment {
        private View mView;
        private ListView mListView;
        private Button mClearHistoryBtn;
        private Button mBackCalculatorBtn;
    
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            mView = inflater.inflate(R.layout.notify_two, container, false);
            if (mView != null) {
    
                return mView;
            } else {
                return super.onCreateView(inflater, container, savedInstanceState);
            }
    
        }
    
        public interface HistoryClickListener {
            void clickListen();
        }
    }

    主代码如下

    bt1.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                getFragmentManager().beginTransaction().replace(R.id.frame, new HistoryFragment()).commit();    
                }
            });
            bt2.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                getFragmentManager().beginTransaction().replace(R.id.frame, new HistoryFragmentTwo()).commit();    
                }
            });
            bt3.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    getFragmentManager().beginTransaction().replace(R.id.frame, new HistoryFragmentTh()).commit();
                }
    
            });

    在一个activity中加三个fragment,我们看下效果

    我们发现,按下返回按钮以后,界面直接退出来了,下面我们进行下修改。

    bt1.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                getFragmentManager().beginTransaction().replace(R.id.frame, new HistoryFragment())
                .addToBackStack(null).commit();    
                }
            });
            bt2.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                getFragmentManager().beginTransaction().replace(R.id.frame, new HistoryFragmentTwo())
                .addToBackStack(null).commit();    
                }
            });
            bt3.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    getFragmentManager().beginTransaction().replace(R.id.frame, new HistoryFragmentTh()).commit();
                }
    
            });

    这个里面其实增加了一个入栈操作

    addToBackStack(null)

    然后我们看下效果

    从上面我们可以发现,addToBackStack(null) 这个方法,其实是把当前的一次操作入栈,给人的感觉是,把之前的界面记录下来,当我们按下反回键的时候,会把记录的界面重新调出来。

    main---(add fragment1 addToBackStack)【这时候main界面就会如栈,在这个界面按返回键,会退回到main】

    main---(add fragment1 addToBackStack)【这时候main界面就会如栈,在这个界面按返回键,会退回到main】---(add fragment2 addToBackStack)【这时候fragment1界面就会如栈,在这个界面按返回键,会退回到fragment1,然后再按,回到main))

    main---(add fragment1 addToBackStack)【这时候main界面就会如栈,在这个界面按返回键,会退回到main】---(add fragment2)---(add fragment3)【这时候只有main界面在栈里,在这个界面按返回键,会调出main))

    其实对这个问题理解的还是不清楚,随着知识点累积,以后再看吧

  • 相关阅读:
    比率(ratio)|帕雷托图|雷达图|轮廓图|条形图|茎叶图|直方图|线图|折线图|间隔数据|比例数据|标准分数|标准差系数|离散系数|平均差|异众比率|四分位差|切比雪夫|右偏分布|
    质量控制|样本和总体|有限总体和无限总体|样本空间与变量空间|总体变异性|
    基因共线性
    q检验|新复极差法|LSD|二因素方差分析
    Tript协议|伯尔尼公约|著作权|立法宗旨|自动保护|著作权集体管理|
    两块式开头样板
    三块式开头样板
    listening-conversation|信息简写|Generally|回答|矛盾
    Listening-lecture|主旨题|术语解释|举例原则|Crash course 哔哩哔哩
    Do jobs|permanent|secure job|Move|Look after|provide sb with sth|Move|Enjoy a good time|Learn about|Be fond of|Have a clearer idea|String quarter|Be subject to|A has little with B|Pigment
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_fragment_15722133.html
Copyright © 2011-2022 走看看