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))
其实对这个问题理解的还是不清楚,随着知识点累积,以后再看吧
Fragment-按返回键程序退出的更多相关文章
- Fragment响应返回键
Activty可以直接响应返回键,而Fragment却不行,可用如下方式: 创建一个抽象类BackHandledFragment,该类中有一个抽象方法onBackPress(),所有BackHandl ...
- vue 用huilder打包APP时,安卓按返回键就退出App改为按两次再退出App
做vue项目时,用Hbuilder打包APP,在安卓下按返回键就是退出了APP,百度了下.都是使用到MUI来解决的,自己也记录下. 在main.js里面引入mui.js并使用. import mui ...
- 解决Hbuilder打包的apk文件按手机返回键直接退出软件
问题描述:Hbuilder打包的app如果点击手机返回键,app会直接退出,返回不了上一页. 写在公共js文件中,每个页面均引入该js,代码如下: document.addEventListener( ...
- Android 应用按返回键异常退出的问题
开发过程中遇到按返回键异常退出的问题,log显示为空指针异常,进一步产看是由于onActivityResult得到的Intent为空. 按返回键复写代码例如以下: @Override public v ...
- Unity响应Android的返回键,退出当前Activity
一:使用 Application.Quit() public void Update() { if(Input.GetKeyDown(KeyCode.Escape)) Application.Quit ...
- Android实现两次点击返回键提示退出
Android的很多app中,都有点击一次返回键提示再次点击退出app的功能. 今天就看了下实现的方式,其实就是在相应的Activity中重写了onKeyDown()方法.在onKeyDown()方法 ...
- Android 两步搞定Fragment的返回键
Fragment可以说是在Android开发必需要使用到技术,项目中的界面基本上都是使用Fragment来实现,而Activity只是作为Fragment的载体,但有些特殊情况下Fragment也不得 ...
- Back键和Menu键程序退出弹窗以及按钮退出程序弹窗的实现
MainActivity.java package com.loaderman.backmenudemo; import android.content.Intent; import android. ...
- Android Studio 点击两次返回键,退出APP
该功能的实现没有特别复杂,主要在onKeyDown()事件中实现,直接上代码,如下: //第一次点击事件发生的时间 private long mExitTime; /** * 点击两次返回退出app ...
随机推荐
- linux学习之多高并发服务器篇(三)
UDP多播服务器 多播 组播组可以是永久的也可以是临时的.组播组地址中,有一部分由官方分配的,称为永久组播组.永久组播组保持不变的是它的ip地址,组中的成员构成可以发 生变化.永久组播组中成员的数量都 ...
- jquery快速清除复选框、单选框的选中
$(":checked").attr("checked", "");
- [Recompose] Handle React Events as Streams with RxJS and Recompose
Events are the beginning of most every stream. Recompose provides a createEventHandler function to h ...
- LeetCode_Construct Binary Tree from Inorder and Postorder Traversal
一.题目 Construct Binary Tree from Inorder and Postorder Traversal My Submissions Given inorder and pos ...
- android动画-拖动
先上图看效果 实质上说是动画有点不妥,确切的说应该是手势的处理,废话不多说看代码 SimpleDragSample.java public class SimpleDragSample extends ...
- Connect the Campus (Uva 10397 Prim || Kruskal + 并查集)
题意:给出n个点的坐标,要把n个点连通,使得总距离最小,可是有m对点已经连接,输入m,和m组a和b,表示a和b两点已经连接. 思路:两种做法.(1)用prim算法时,输入a,b.令mp[a][b]=0 ...
- windows常用命令有哪些(整理)
windows常用命令有哪些(整理) 一.总结 一句话总结:其实这个好学,只要先弄懂主干,清除主干,那么枝叶的添加逻辑就很清除了 这种多内容的,散乱的,弄清除主干效率就高了 1.windows命令行的 ...
- Hadoop的多节点集群详细启动步骤(3或5节点)
版本1 利用自己写的脚本来启动,见如下博客 hadoop-2.6.0-cdh5.4.5.tar.gz(CDH)的3节点集群搭建 hadoop-2.6.0.tar.gz的集群搭建(3节点) hadoop ...
- lvs为何不能完全替代DNS轮询--转
原文地址:http://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651959595&idx=1&sn=5f0633afd2 ...
- SQL SERVER 新增表、新增字段、修改字段 判断表是否存在
// 新增之前判断表是否存在 IF NOT EXISTS (SELECT NAME FROM SYSOBJECTS WHERE ID = OBJECT_ID('tb_MessageHistory')) ...