【Andorid X 项目笔记】嵌套Fragment的使用(5)
一、准备
关于最新的Android兼容包的介绍,参见官网这里。可以在android sdk目录下extras/android/support/v13/android-support-v13.jar找到最新版,注意是伴随着Android 4.2一起更新的。
关于嵌套Fragment的介绍,参照官网这里。
二、截图
三、代码
FragmentNestActivity.java
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* 嵌套Fragment使用
*
* @author 农民伯伯
* @see http://www.cnblogs.com/over140/archive/2013/01/02/2842227.html
*
*/
public class FragmentNestActivity extends FragmentActivity implements OnClickListener {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.nested_fragments);
findViewById(R.id.btnModule1).setOnClickListener( this);
findViewById(R.id.btnModule2).setOnClickListener( this);
findViewById(R.id.btnModule3).setOnClickListener( this);
findViewById(R.id.btnModule1).performClick();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnModule1:
addFragmentToStack(FragmentParent.newInstance(0));
break;
case R.id.btnModule2:
addFragmentToStack(FragmentParent.newInstance(1));
break;
case R.id.btnModule3:
addFragmentToStack(FragmentParent.newInstance(2));
break;
}
}
private void addFragmentToStack(Fragment fragment) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
// ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_in_left);
ft.replace(R.id.fragment_container, fragment);
ft.commit();
}
/** 嵌套Fragment */
public final static class FragmentParent extends Fragment {
public static final FragmentParent newInstance( int position) {
FragmentParent f = new FragmentParent();
Bundle args = new Bundle(2);
args.putInt("position", position);
f.setArguments(args);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View convertView = inflater.inflate(R.layout.viewpager_fragments, container, false);
ViewPager pager = (ViewPager) convertView.findViewById(R.id.pager);
final int parent_position = getArguments().getInt("position");
// 注意这里的代码
pager.setAdapter( new FragmentStatePagerAdapter(getChildFragmentManager()) {
@Override
public Fragment getItem( final int position) {
return new Fragment() {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
TextView convertView = new TextView(getActivity());
convertView.setLayoutParams( new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
convertView.setGravity(Gravity.CENTER);
convertView.setTextSize(30);
convertView.setTextColor(Color.BLACK);
convertView.setText("Page " + position);
return convertView;
}
};
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle( int position) {
return "Page " + parent_position + " - " + position;
}
});
return convertView;
}
}
}
代码说明:
这里最关键的是方法getChildFragmentManager的支持。这里也演示了Fragment作为嵌套内部类的使用方法。
nested_fragments.xml
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:layout_width ="match_parent"
android:layout_height ="match_parent"
android:orientation ="vertical" >
< FrameLayout
android:id ="@+id/fragment_container"
android:layout_width ="fill_parent"
android:layout_height ="0dip"
android:layout_weight ="1.0"
android:background ="#F7F5DE" >
</ FrameLayout >
< LinearLayout
android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:layout_gravity ="bottom"
android:background ="@android:color/black"
android:orientation ="horizontal" >
< ImageView
android:id ="@+id/btnModule1"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_marginBottom ="3dp"
android:layout_marginLeft ="7dp"
android:layout_marginTop ="3dp"
android:src ="@android:drawable/ic_dialog_dialer" />
< ImageView
android:id ="@+id/btnModule2"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_marginBottom ="3dp"
android:layout_marginLeft ="7dp"
android:layout_marginTop ="3dp"
android:src ="@android:drawable/ic_dialog_info" />
< ImageView
android:id ="@+id/btnModule3"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_marginBottom ="3dp"
android:layout_marginLeft ="7dp"
android:layout_marginTop ="3dp"
android:src ="@android:drawable/ic_dialog_alert" />
</ LinearLayout >
</ LinearLayout >
viewpager_fragments.xml
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:layout_width ="match_parent"
android:layout_height ="match_parent" >
< android.support.v4.view.ViewPager
android:id ="@+id/pager"
android:layout_width ="match_parent"
android:layout_height ="match_parent" >
< android.support.v4.view.PagerTitleStrip
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_gravity ="top" />
</ android.support.v4.view.ViewPager >
</ LinearLayout >
代码说明:
注意!实践发现ViewPager并不能作为顶层容器,否则会报错。
四、说明
这是一个典型的嵌套Fragment的例子,最外层使用FrameLayout来实现几大模块的切换,内部使用ViewPager实现子模块的切换,非常实用。
本文转自博客园农民伯伯的博客,原文链接:【Andorid X 项目笔记】嵌套Fragment的使用(5),如需转载请自行联系原博主。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
50个Android开发技巧(24 处理ListView数据为空的情况)
在移动平台上为用户展示数据的一个常用方法是将数据填充进一个List内,而此时需要注意的一点就是: 原文地址:(http://blog.csdn.net/vector_yi/article/details/24936163) 如何处理需要填充的数据为空的情况? ListView及其他继承自AdapterView的类都有一个简便的处理这种情况的方法:setEmptyView(View)。 当ListView的Adapter为空或者Adapter的isEmpty()方法返回true的时候,它将会把设置的emptyview绘制出来。 举个栗子,假设我们需要创建一个应用来管理我们的待办事项,我们的主页面将会是一个用来展示这些待办事项的ListView。 而当我们第一次载入进这个应用时,待办事项必然为空。此时我们就可以利用一个图片或者一段描述性的话来表达“无待办事项”。 看看XML布局文件: [html] view plain copy <FrameLayoutxmlns:android="http://schemas.android.com/apk/re...
- 下一篇
Ubuntu + Eclipse + ADT搭建Android开发环境
Android开发环境搭建 捣鼓了一整天,终于把开发环境给弄好了。 一直想在Linux下面做开发,所以这次特别选择在Ubuntu操作系统下做,试用一天感觉现在Ubuntu已经非常成熟了,基本的日常使用都能够满足, 关于Ubuntu的详细介绍以后再说,这里主要记录一下Android的开发环境搭建。 我的系统:Ubuntu 9.10 一 目标平台: Ubuntu + Eclipse + ADT 二 开发前的准备: 1. 下载Eclipse IDE。我选择的是目前最新的3.5.1,Linux 32bit的,下载地址。 2. 下载Android SDK,Linux(i386)版。下载地址。 3. 下载Android的Eclipse插件(Android Development Tools, ADT),下载地址。这个可以通过Eclipse安装插件的方式在线安装,我在安装的时候不知道为什么无法在线安装,所以就Down下来了。 三 开始安装: 1. 安装JDK 安装命令为: sudo apt-get sun-java6-jdk 在Ubuntu里面安装好JDK之后,好像不用设置环境变量,跟Windows...
相关文章
文章评论
共有0条评论来说两句吧...