Fragment进阶(三)----->栈的种种操作

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_add_frag1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ADD  Fragment1" />

    <Button
        android:id="@+id/btn_add_frag2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ADD  Fragment2" />

    <Button
        android:id="@+id/btn_remove_frag2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Remove  Fragment2" />

    <Button
        android:id="@+id/btn_repalce_frag1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="replace  Fragment1" />

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

fragment1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff00f0"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is fragment 1"
        android:textColor="#000000"
        android:textSize="25sp" />

</LinearLayout>

fragment2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffff00"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/fragment2_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is fragment 2"
        android:textColor="#000000"
        android:textSize="25sp" />

</LinearLayout>

Fragment1

package com.example.harvicblog3_1;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import java.util.List;

public class Fragment1 extends Fragment {
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		return inflater.inflate(R.layout.fragment1, container, false);
	}

}

Fragment2

package com.example.harvicblog3_1;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class Fragment2 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        return inflater.inflate(R.layout.fragment2, container, false);
    }
}

MainActivity

package com.example.harvicblog3_1;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.widget.Button;
import android.view.View;

public class MainActivity extends FragmentActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btnAddFrag1 = (Button) findViewById(R.id.btn_add_frag1);
        Button btnAddFrag2 = (Button) findViewById(R.id.btn_add_frag2);
        Button btnRemoveFrage2 = (Button) findViewById(R.id.btn_remove_frag2);
        Button btnReplaceFrage1 = (Button) findViewById(R.id.btn_repalce_frag1);

        btnAddFrag1.setOnClickListener(this);
        btnAddFrag2.setOnClickListener(this);
        btnRemoveFrage2.setOnClickListener(this);
        btnReplaceFrage1.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id) {
            case R.id.btn_add_frag1: {
                Fragment1 fragment1 = new Fragment1();
                addFragment(fragment1, "fragment1");
            }
            break;
            case R.id.btn_add_frag2: {
                Fragment2 fragment2 = new Fragment2();
                addFragment(fragment2, "fragment2");
            }
            break;
            case R.id.btn_remove_frag2: {
                removeFragment2();
            }
            break;
            case R.id.btn_repalce_frag1: {
                replaceFragment1();
            }
        }

    }

    private void addFragment(Fragment fragment, String tag) {
        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(R.id.fragment_container, fragment, tag);
        transaction.commit();
    }

    private void removeFragment2() {
        FragmentManager manager = getSupportFragmentManager();
        Fragment fragment = manager.findFragmentByTag("fragment2");
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.remove(fragment);
        transaction.commit();
    }

    private void replaceFragment1() {
        FragmentManager manager = getSupportFragmentManager();
        Fragment2 fragment2 = new Fragment2();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace(R.id.fragment_container, fragment2);
        transaction.commit();
    }
}

**************************************************************操作二*************************************

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_add_frag1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ADD  Fragment1"
            android:layout_weight="1" />

        <Button
            android:id="@+id/btn_add_frag2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ADD  Fragment2"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_add_frag3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ADD  Fragment3" />

        <Button
            android:id="@+id/btn_add_frag4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ADD  Fragment4" />
    </LinearLayout>

    <Button
        android:id="@+id/btn_pop_back_stack"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="popBackStack" />

    <Button
        android:id="@+id/btn_back_to_frg2_0"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="BackToFrag2_0" />

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

fragment1.xml  fragment2.xml fragment3.xml  fragment4.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff00f0"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is fragment 1"
        android:textColor="#000000"
        android:textSize="25sp" />

</LinearLayout>

Fragment1  Fragment2  Fragment3  Fragment4

package com.example.harvicblog3_2;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment {
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		return inflater.inflate(R.layout.fragment1, container, false);
	}

}
package com.example.harvicblog3_2;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentManager.OnBackStackChangedListener;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends FragmentActivity implements
		View.OnClickListener {
	private int stackID1, stackID2, stackID3, stackID4;
	private OnBackStackChangedListener listener;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		Button btnAddFrag1 = (Button) findViewById(R.id.btn_add_frag1);
		Button btnAddFrag2 = (Button) findViewById(R.id.btn_add_frag2);
		Button btnAddFrag3 = (Button) findViewById(R.id.btn_add_frag3);
		Button btnAddFrag4 = (Button) findViewById(R.id.btn_add_frag4);
		Button btnPopBackStack = (Button) findViewById(R.id.btn_pop_back_stack);
		Button btnBackToFrag2_0 = (Button) findViewById(R.id.btn_back_to_frg2_0);

		btnAddFrag1.setOnClickListener(this);
		btnAddFrag2.setOnClickListener(this);
		btnAddFrag3.setOnClickListener(this);
		btnAddFrag4.setOnClickListener(this);
		btnPopBackStack.setOnClickListener(this);
		btnBackToFrag2_0.setOnClickListener(this);

		//Fragment管理器、添加回退监听
		FragmentManager manager = getSupportFragmentManager();
		listener = new FragmentManager.OnBackStackChangedListener() {

			@Override
			public void onBackStackChanged() {
				Log.d("qijian", "backstack changed");
			}
		};
		manager.addOnBackStackChangedListener(listener);
	}

	//移除监听
	@Override
	protected void onDestroy() {
		super.onDestroy();
		FragmentManager manager = getSupportFragmentManager();
		manager.removeOnBackStackChangedListener(listener);
	}

	@Override
	public void onClick(View v) {
		int id = v.getId();
		switch (id) {
		case R.id.btn_add_frag1: {
			Fragment1 fragment1 = new Fragment1();
			stackID1 = addFragment(fragment1, "fragment1");
		}
			break;
		case R.id.btn_add_frag2: {
			Fragment2 fragment2 = new Fragment2();
			stackID2 = addFragment(fragment2, "fragment2");
		}
			break;
		case R.id.btn_add_frag3: {
			Fragment3 fragment3 = new Fragment3();
			stackID3 = addFragment(fragment3, "fragment3");
		}
			break;
		case R.id.btn_add_frag4: {
			Fragment4 fragment4 = new Fragment4();
			stackID4 = addFragment(fragment4, "fragment4");
		}
			break;
			//类似于back键,回退
		case R.id.btn_pop_back_stack: {
			popBackStack();
		}
			break;
		case R.id.btn_back_to_frg2_0: {
			popBackStackToFrag2_0();
		}
			break;
		}
	}

	private int addFragment(Fragment fragment, String stackName) {
		FragmentManager manager = getSupportFragmentManager();
		FragmentTransaction transaction = manager.beginTransaction();
		transaction.add(R.id.fragment_container, fragment);
		transaction.addToBackStack(stackName);
		return transaction.commit();
	}

	private void popBackStack() {
		FragmentManager manager = getSupportFragmentManager();
		manager.popBackStack();
	}

	private void popBackStackToFrag2_0() {
		FragmentManager manager = getSupportFragmentManager();
		manager.popBackStack("fragment2", 0);// 方法一,通过TAG回退
		// manager.popBackStack(stackID2, 0);//方法二,通过Transaction ID回退
	}

}

*******************************************操作三*******************************************

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_add_frag1"
        android:text="ADD Frag1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn_add_other_frags"
        android:text="ADD Frag2,3,4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/btn_popBackStack"
        android:text="popBackStack"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></FrameLayout>

</LinearLayout>

fragment1.xml  fragment2.xml fragment3.xml  fragment4.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff00f0"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is fragment 1"
        android:textColor="#000000"
        android:textSize="25sp" />

</LinearLayout>

Fragment1  Fragment2  Fragment3  Fragment4

package com.example.harvicblog3_2;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment {
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		return inflater.inflate(R.layout.fragment1, container, false);
	}

}

MainActivity

package com.example.harvicblog3_3;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.Button;

public class MainActivity extends FragmentActivity implements
		View.OnClickListener {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		Button btnAddFrag1 = (Button) findViewById(R.id.btn_add_frag1);
		Button btnAddOtherFrags = (Button) findViewById(R.id.btn_add_other_frags);
		Button btnPopStack = (Button) findViewById(R.id.btn_popBackStack);

		btnAddFrag1.setOnClickListener(this);
		btnAddOtherFrags.setOnClickListener(this);
		btnPopStack.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		int id = v.getId();
		switch (id) {
		case R.id.btn_add_frag1: {
			addFragment1();
		}
			break;
		case R.id.btn_add_other_frags: {
			addOtherFragments();
		}
			break;
		case R.id.btn_popBackStack: {
			popBackStack();
		}
			break;
		}
	}

	private void addFragment1() {
		Fragment1 fragment1 = new Fragment1();
		FragmentManager manager = getSupportFragmentManager();
		FragmentTransaction transaction = manager.beginTransaction();
		transaction.add(R.id.fragment_container, fragment1);
		transaction.addToBackStack("fragment1");
		transaction.commit();
	}

	/**
	 * 、首先,添加Fragment1,提交一次事务 2、然后,一次添加Fragment2,Fragment3,Fragment4,然后提交一次事务
	 * 3、利用popBackStack
	 * ()将顶层事务出栈,可以看到把Fragment2,Fragment3,Fragment4一次出栈,界面显示在了Fragment1的位置
	 * ,这就充分说明了,回滚是以提交的事务为单位进行的!
	 */
	private void addOtherFragments() {
		Fragment2 fragment2 = new Fragment2();
		Fragment3 fragment3 = new Fragment3();
		Fragment4 fragment4 = new Fragment4();
		FragmentManager manager = getSupportFragmentManager();
		FragmentTransaction transaction = manager.beginTransaction();
		transaction.add(R.id.fragment_container, fragment2);
		transaction.add(R.id.fragment_container, fragment3);
		transaction.add(R.id.fragment_container, fragment4);
		transaction.addToBackStack("other fragments");
		transaction.commit();
	}

	private void popBackStack() {
		FragmentManager manager = getSupportFragmentManager();
		manager.popBackStack();
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-03 00:09:24

Fragment进阶(三)----->栈的种种操作的相关文章

Java进阶(三十四)Integer与int的种种比较你知道多少?

Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值为0,Ingeter的初值为null.但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱.所以我对它们进行了总结,希望对大家有帮助. 首先看代码: package

Python进阶(三十五)-Fiddler命令行和HTTP断点调试

Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令 ??上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都称为一个session).界面中能够看到Fiddler抓取的全部HTTP请求.而为了更加方便的管理全部的session, Fiddler提供了一系列内置的函数用于筛选和操作这些session(习惯命令行操作Linux的童鞋应该能够感受到这会有多么方便

Python进阶(三十四)-Python3多线程解读

Python进阶(三十四)-Python3多线程解读 线程讲解 ??多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度. 程序的运行速度可能加快. 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. ??线程在执行过程中与进程还是有区别的.每个独立

Java进阶(三十五)java int与integer的区别

Java进阶(三十五)java int与integer的区别 前言 int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象. 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者而integer 是后者(也就是一个类):因此在类进行初始化时int类的变量初始为0.而Integer的变量则初始化为null. 2.初始化时: int i =1; Integer i= new In

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据 ??matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. ??它的文档相当完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序.因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定. ??在Linux下比较著名的数据图工具还有gnuplot

Python进阶(三十六)-Web框架Django项目搭建全过程

Python进阶(三十六)-Web框架Django项目搭建全过程 ??IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 ??Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! Django 特点 强大的数据库功能 用python的类继承,几行代码就可以拥有一个丰富,动态的数据库操作接口(API),如果需要你也能执行SQL语句. 自带的强大的后台功能 几行简单的代码就让你的网

Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复

Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状态之外, 还需要用户手动保存一些成员变量. Fragment的状态有它自己的实例状态和其中的View状态, 因为其生命周期的灵活性和实际需要的不同, 情况会多一些. 根据源码, 列出了Fragment中实例状态和View状态保存和恢复的几个入口, 便于分析查看. 最后专门讲了WebView状态保存和

《深入Java虚拟机学习笔记》- 第10章 栈和局部变量操作

Java栈和局部变量操作 Java虚拟机是基于栈的机器,几乎所有Java虚拟机的指令都与操作数栈相关.栈操作包括把常量压入操作数栈.执行通用的栈操作.在操作数栈和局部变量之间往返传输值. 1常量入栈操作: 操作码在执行常量入栈操作之前,使用三种方式指明常量的值:常量值隐含包含在操作码内部.常量值在字节码中如同操作数一样跟随在操作码之后,或者从常量池中取出常量. 1.1常量值隐含包含在操作码内部: 将一个字长的常量压入栈 操作码 操作数 说明 iconst_m1 (无) 将int类型值-1压入栈

Git工程开发实践(三)——Git常用操作

Git工程开发实践(三)--Git常用操作 一.Git仓库操作 1.Git仓库创建 git init在当前目录中初始化Git仓库git init [project-name]创建一个新目录并初始化仓库初始化git仓库会默认创建一个mater分支,创建名为.git的子目录,内含初始化Git仓库中所有的骨干文件,此时仓库中的文件还没有被跟踪.通过git add命令来实现对指定文件的跟踪,然后执行git commit提交. git add . git commit -m 'initial projec