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))

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

  • 相关阅读:
    vscode配置备份
    正则替换html代码中img标签的src值
    使用css3原生变量实现主题换肤
    vue3基础知识学习系列(二)响应式原理实现
    vue3基础知识学习系列(一)api使用
    eslint规则中文解释
    开发笔记:使用canvas实现3D金字塔比例图表📈
    实用网页UI调试技巧
    2020年特殊的一年,成就特殊的我们
    java设计模式之责任链模式
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_fragment_15722133.html
Copyright © 2011-2022 走看看