开发者社区> walb呀> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【Andorid X 项目笔记】嵌套Fragment的使用(5)

简介:
+关注继续查看

一、准备

关于最新的Android兼容包的介绍,参见官网这里。可以在android sdk目录下extras/android/support/v13/android-support-v13.jar找到最新版,注意是伴随着Android 4.2一起更新的。

关于嵌套Fragment的介绍,参照官网这里。 

二、截图

 

 

三、代码 

FragmentNestActivity.java

import android.graphics.Color;
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 

<?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: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 

<?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.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),如需转载请自行联系原博主。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
XPage 一个非常方便的Android Fragment页面框架
XPage 一个非常方便的Android Fragment页面框架
0 0
Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建
原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要将UI组件和活动的行为封装到模块中,这些模块可以在activity中互相交换。
602 0
分享个刚写好的 android 的 ListView 动态加载类,功能全而代码少。
(转载声明出处:http://www.cnblogs.com/linguanh/) 简介:      该ListView 实现动态加载数据,为了方便用户充分地自定义自己的数据源、点击事件,等核心操作,本类采用接口形式提供上述具体操作!      1,所有关键的操作使用接口,由用户自己定义,              包括:数据适配器的配置、动态加载函数的配置、item点击接口;      2,已经新建线程来执行动态函数。
746 0
Android官方入门文档[16]创建一个Fragment代码片段
Android官方入门文档[16]创建一个Fragment代码片段   Creating a Fragment创建一个Fragment代码片段   This lesson teaches you to1.
765 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Android插件化-从入门到"放弃"
立即下载
UI2CODE智能生成flutter代码--整体架构 【上叶】
立即下载
Android插件化:从入门到放弃
立即下载