关于Fragment里面嵌套fragment
今天看到一篇好文章
https://www.2cto.com/kf/201609/545979.html
转载过来记录一下,往后需要的时候可以随时查看;
接下来进入正题:
动态fragment的使用
对于动态的使用fragment,就是简单的底部多个按钮,然后多个fragment进行切换,这个应该很简单,平时都在用。
MainActivity:
/**
* 主布局
* @author Rine
* @version 1.0, 2015-12-1
*/
public class MainActivity extends FragmentActivity{
MainDB mdata = new MainDB(); /**
* 定义结束时间
*/
private long exitTime = 0; /**
* 定义FragmentTabHost对象
*/
private FragmentTabHost mTabHost; /**
* 定义一个布局
*/
private LayoutInflater layoutInflater; /**
* 定义数组来存放Fragment界面
*/
private Class fragmentArray[] = mdata.fragmentArray; /**
* 定义数组来存放按钮图片
*/
private int mImageViewArray[] = mdata.ImageViewArray; /**
* Tab选项卡的文字
*/
private String mTextviewArray[] = mdata.TextviewArray; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// CloudOnlyDB dbHelper;
// dbHelper = new CloudOnlyDB(MainActivity.this);
// HomeData home = new HomeData(MainActivity.this);
initView( );
} /**
* 初始化组件
*/
private void initView (){
/**
* 实例化布局对象
*/
layoutInflater = LayoutInflater.from(this); /**
* 实例化TabHost对象,得到TabHost
*/
mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.container); //加载内容 /**
* 得到fragment的个数
*/
int count = fragmentArray.length; for(int i = 0; i < count; i++){
TabSpec tabSpec = mTabHost.newTabSpec(mTextviewArray[i]).setIndicator(getTabItemView(i)); //为每一个Tab按钮设置图标、文字和内容
mTabHost.addTab(tabSpec, fragmentArray[i], null); //将Tab按钮添加进Tab选项卡中
} } /**
* 给Tab按钮设置图标和文字
*/
private View getTabItemView(int index){
View view = layoutInflater.inflate(R.layout.main_tab_view, null); ImageView imageView = (ImageView) view.findViewById(R.id.imageview);
imageView.setImageResource(mImageViewArray[index]);
TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(mTextviewArray[index]);
return view;
} /**
* 2次退出效果
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
exit(); //按返回键,true则退出
return false;
}
return super.onKeyDown(keyCode, event);
} public void exit() { //按返回退出
if ((System.currentTimeMillis() - exitTime) > 2000) {
Toast.makeText(getApplicationContext(), "再按一次退出程序",
Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else { //退出
finish();
System.exit(0);
} } }
MainAcitivity 中的MainDB
/**
* 存放主布局数据
* @author Rine
* @version 1.0, 2015-12-1
*/
public class MainDB {
/**
* 定义数组来存放Fragment界面
*/
public Class fragmentArray[] = {one.class,two.class,three.class};
/**
* 定义数组来存放按钮图片
*/
public int ImageViewArray[] = {R.drawable.home,R.drawable.ccarticle,
R.drawable.ccone};
/**
* Tab选项卡的文字
*/
public String TextviewArray[] = {"one","twom","three"};
}
MainActivity 相应的布局:
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Rine -->
<!-- 功能:主布局 --> <linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="https://schemas.android.com/apk/res/android"> <framelayout android:id="@+id/container" android:layout_height="0dp" android:layout_weight="1" android:layout_width="fill_parent"> <framelayout android:id="@android:id/tabcontent" android:layout_height="0dp" android:layout_weight="0" android:layout_width="0dp">
</framelayout></android.support.v4.app.fragmenttabhost> </framelayout></linearlayout>
相应的style:
<style name="homework_tab_item" type="text/css"><item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_weight">1</item>
<item name="android:button">@null</item>
<item name="android:gravity">center</item>
<item name="android:textColor">@color/homework_tab_item_text_color</item></style>
相应的 color:
<!--?xml version="1.0" encoding="utf-8"?-->
<selector xmlns:android="https://schemas.android.com/apk/res/android"> <item android:color="#000000" android:state_checked="true">
<item android:color="#757575"> </item></item></selector>
fragment嵌套fragment
这就是简单动态fragment的应该。这也是其中的一种方法。
然后就是在其fragment中再嵌套多个fragment,我采用的是利用单选按钮来实现,当然单选按钮外面还要包一层RadioGroup。
Activity:
/**
* fragment嵌套fragment
* @author Rine
* @version 1.0, 2015-12-1
*/
public class two extends Fragment implements OnClickListener
{
/**
* 定义一个布局
*/
private LayoutInflater inflater;
// private View rootView;// 缓存Fragment view
private Context mainActivity;
private TwoToOne twoToOne;
private TwoToTwo twoToTwo;
/**
* one、two RadioGroup 控件
*/
private RadioGroup twoGroup;
protected RadioButton twoOne, twoTwo; /**
* 加载页面
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mainActivity = getActivity();
inflater = LayoutInflater.from(getActivity());
// 初始化控件和声明事件
// rootView = inflater.inflate(R.layout.two, null);
twoGroup = (RadioGroup) getActivity().findViewById(R.id.two_group);
twoOne = (RadioButton) getActivity().findViewById(R.id.two_one);
twoTwo = (RadioButton) getActivity().findViewById(R.id.two_two);
//控件颜色
twoOne.setTextColor(getResources().getColor(R.color.red));
twoTwo.setTextColor(getResources().getColor(R.color.black));
twoOne.setOnClickListener(this);
twoTwo.setOnClickListener(this); setDefaultFragment();
}
/**
* 设置默认的Fragment
*/
private void setDefaultFragment()
{
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
twoToOne = new TwoToOne();
transaction.add(R.id.framelayout, twoToOne).commit();
} @Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
// 开启Fragment事务
FragmentTransaction transaction = fm.beginTransaction(); switch (v.getId())
{
case R.id.two_one:
if (twoToOne == null)
{
twoToOne = new TwoToOne();
}
// 使用当前Fragment的布局替代id_content的控件
transaction.replace(R.id.framelayout, twoToOne);
//控件颜色
twoOne.setTextColor(getResources().getColor(R.color.red));
twoTwo.setTextColor(getResources().getColor(R.color.black));
break;
case R.id.two_two:
if (twoToTwo == null)
{
twoToTwo = new TwoToTwo();
}
transaction.replace(R.id.framelayout, twoToTwo);
//控件颜色
twoOne.setTextColor(getResources().getColor(R.color.black));
twoTwo.setTextColor(getResources().getColor(R.color.red));
break;
}
// transaction.addToBackStack();
// 事务提交
transaction.commit();
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.two, null); } }
其对应的布局:
<!--?xml version="1.0" encoding="utf-8"?-->
<linearlayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" xmlns:android="https://schemas.android.com/apk/res/android">
<relativelayout android:background="@color/white" android:layout_height="@dimen/height_title" android:layout_width="match_parent">
<linearlayout android:id="@+id/layout_brck" android:layout_height="match_parent" android:layout_marginleft="@dimen/margin_15dp" android:layout_width="wrap_content" android:orientation="horizontal"> </linearlayout>
<radiogroup android:gravity="center" android:id="@+id/two_group" android:layout_centerinparent="true" android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal"> <radiobutton android:background="@null" android:checked="true" android:id="@+id/two_one" android:layout_marginright="@dimen/margin_20dp" android:text="one" android:textcolor="@color/black" android:textsize="@dimen/title_textsize_22sp" style="@style/homework_tab_item"> <radiobutton android:background="@null" android:id="@+id/two_two" android:layout_margin="5dp" android:layout_marginleft="@dimen/margin_20dp" android:text="two" android:textcolor="@color/black" android:textsize="@dimen/title_textsize_22sp" style="@style/homework_tab_item">
</radiobutton></radiobutton></radiogroup> <view android:background="@color/br_title_color" android:layout_alignparentbottom="true" android:layout_height="0.1dp" android:layout_width="match_parent">
</view></relativelayout> <framelayout android:id="@+id/framelayout" android:layout_height="0dp" android:layout_weight="1" android:layout_width="match_parent">
</framelayout> </linearlayout>
OK。大体就是这样了。示例图如下:

关于Fragment里面嵌套fragment的更多相关文章
- Fragment里面嵌套Fragment的问题
最近两天做项目时,要在fragment里面嵌套Fragment,最开始使用Fragment的hide,show等方法一直失败,,如图,message是一个fragment,在里面又有两个子fragme ...
- 关于TabLayout与ViewPager在Fragment中嵌套Fragment使用或配合使用的思考
注意: 因为继承的是Fragment,所以getSupportFragmentManager()与getFragmentManager()方法无法使用,这里需要用到getChildFragmentMa ...
- Android 中关于Fragment嵌套Fragment的问题
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5802146.html 问题描述: 在项目中Activity A中嵌套Fragment B,Fragment ...
- android fragment嵌套fragment出现的问题:no activity
package com.example.fragmentNavigation2.fragment; import android.content.Context; import android.os. ...
- 嵌套fragment时必须要重写 onDetach()
/** * 嵌套fragment时必须要重写 onDetach()如下 */ @Override public void onDetach() { super.onDetach(); ...
- fragment中嵌套viewpager,vierpager中有多个fragment,不显示 .
fragment中嵌套viewpager,vierpager中有多个fragment,不显示 ... 现在好多应用流行一种布局.底部几个工具栏选项,上面也有类似tab的选项. 底部用RadioGrou ...
- Fragment嵌套Fragment时候。子类fragment调用父容器Fragment方法
业务场景:有的时候我们的页面可能是Activity 嵌套多个Fragment ..其中某个Fragment 又嵌套多个Fragment. 其中某个子Fragment 定义为 NewsFragmen ...
- Android FragmentActivity 嵌套 Fragment 调用startActivityForResult返回的requestCode错误
Android FragmentActivity 嵌套 Fragment 调用startActivityForResult返回的requestCode错误 此时,要在调用startActivityFo ...
- Android流行界面结构——Fragment通过ViewPager(带指示器)嵌套Fragment结构的创建方法详解
原创文章,转载请注明出处http://www.cnblogs.com/baipengzhan/p/6287213.html 当前Android流行界面结构的一种——Fragment通过ViewPage ...
随机推荐
- 《前端之路》之 Javascript 模块化管理的来世今生
目录 第二章 - 04: Javascript 模块化管理的来世今生 一.什么是模块化开发 1-1.模块化第一阶段 1-2.封装到对象 1-3. 对象的优化 二.模块化管理的发展历程 2-1.Comm ...
- HashMap?面试?我是谁?我在哪
现在是晚上11点了,学校屠猪馆的自习室因为太晚要关闭了,勤奋且疲惫的小鲁班也从屠猪馆出来了,正准备回宿舍洗洗睡,由于自习室位置比较偏僻所以是接收不到手机网络信号的,因此小鲁班从兜里掏出手机的时候,信息 ...
- 带着新人看java虚拟机01
1.前言(基于JDK1.7) 最近想把一些java基础的东西整理一下,但是又不知道从哪里开始!想了好久,还是从最基本的jvm开始吧!这一节就简单过一遍基础知识,后面慢慢深入... 水平有限,我自己也是 ...
- .netcore2.1 使用postgresql数据库,不能实现表的CRUD问题
PostgreSQL对表名.字段名都是区分大小写的.为了兼容其他的数据库程序代码的编写,推荐使用小写加_的方式,例如:swagger_info 我们使用.netcore连接postgresql数据库时 ...
- C++结构体与排列三平台出售
结构将不同的数据类型整合在一起构成一个新的类型,排列三平台出售(企 娥:217 1793 408)相当于数据中一条记录,比如学生结构体,整合了学好,姓名等信息.结构体的好处就是可以对这些信息进行整体管 ...
- 1、Linux命令随笔
1 Linux命令总结 2 3 man ==命令帮助; 4 help ==命令的帮助(bash的内置命令); 5 ls ==list,查看目录列表; 6 -ld:查看目录权限; 7 -l:(long) ...
- spring Boot环境下dubbo+zookeeper的一个基础讲解与示例
一,学习背景 1. 前言 对于我们不管工作还是生活中,需要或者想去学习一些东西的时候,大致都考虑几点: a) 我们为什么需要学习这个东西? b) 这个东西是什么? c) ...
- 数字信号处理专题(3)——FFT运算初探
一.前言 FFT运算是目前最常用的信号频谱分析算法.在本科学习数字信号处理这门课时一直在想:学这些东西有啥用?公式推来推去的,有实用价值么?到了研究生后期才知道,广义上的数字信号处理无处不在:手机等各 ...
- bat脚本自定义魔兽warIII运行分辨率,去黑边
我们一般平时安装完WarIII后运行时的分辨率默认是800*600,导致有黑边的存在.所以我写了一个bat脚本来自定义WarIII的运行分辨率.需要以管理员身份运行. 下载链接: 链接:https:/ ...
- Windows2008安装组件命令行工具ServerManagerCmd用法介绍
转自:http://blog.sina.com.cn/s/blog_537de4b5010128al.html Windows2008 安装组件服务等内容比原来复杂的多,用鼠标点来点去,既繁琐也缓慢, ...