关于Fragment里面嵌套fragment

关于这个,其实我以前做过,但是又忘记了,然后找网上的DEMO,发现不尽如意,然后找了一下以前的DEMO,发现我保存下来了。

看来以后要勤写博客,牢记那些以前用过的东西。

接下来进入正题:

 动态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 xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

  <FrameLayout
        android:id="@+id/container"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

  <android.support.v4.app.FragmentTabHost
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

    <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />            
  </android.support.v4.app.FragmentTabHost>

</LinearLayout>


相应的style:

 <style name="homework_tab_item">
        <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="http://schemas.android.com/apk/res/android">

    <item android:state_checked="true" android:color="#000000"/>
    <item android:color="#757575"/>

</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 xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/height_title"
        android:background="@color/white" >
       <LinearLayout
            android:id="@+id/layout_brck"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="@dimen/margin_15dp"
            android:orientation="horizontal" >

        </LinearLayout>
        <RadioGroup  
            android:id="@+id/two_group"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:orientation="horizontal" >

            <RadioButton
                android:id="@+id/two_one"
                style="@style/homework_tab_item"
                android:layout_marginRight="@dimen/margin_20dp"
                android:background="@null"
                android:checked="true"
                android:text="one"
                android:textColor="@color/black"
                android:textSize="@dimen/title_textsize_22sp" />

            <RadioButton
                android:id="@+id/two_two"
                style="@style/homework_tab_item"
                android:layout_margin="5dp"
                android:layout_marginLeft="@dimen/margin_20dp"
                android:background="@null"
                android:text="two"
                android:textColor="@color/black"
                android:textSize="@dimen/title_textsize_22sp" />
        </RadioGroup>


        <View
            android:layout_width="match_parent"
            android:layout_height="0.1dp"
            android:layout_alignParentBottom="true"
            android:background="@color/br_title_color" />
    </RelativeLayout>

    <FrameLayout 
        android:id="@+id/framelayout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >
    </FrameLayout>

</LinearLayout>

OK。大体就是这样了。示例图如下:




DEMO链接:DEMO链接

这是一个eclipse资源,因为是之前写好的,所以就直接用了,写了这篇文章,如果看懂了这些代码,相应的Android studio应该也很简单。


猜你喜欢

转载自blog.csdn.net/R_ine/article/details/52446768
今日推荐