当前位置:操作系统 > 安卓/Android >>

Fragment的使用与学习及使用过程中遇到的问题

一直以来大概做带有导航类的应用的时候,都是使用TabActivity,但是,最新的SDK把TabActivity标成了deprecated,那只能重新寻找替代方案了,目前网上说的方案都是很混乱的
 
Fragment翻译过来叫碎片,但是我个人觉得可以理解为具有生命周期的View
 
由于Fragment是3.0以后的东西,对于适应低版本,那我们只能使用谷歌官方提供的android-support-v4.jar这个包了,最快捷的办法就是右击工程名,选择Android Tools——add support library...,即可添加这个包了
 
由于3.0以下的Activity里面没有对Fragment的支持,所以选择继承android-support-v4.jar包中的FragmentActivity,其功能跟3.0及以后的版本的Activity的功能一样
 
 
 DEMO下载:
 
FragmentTest.zip
 
底部导航加顶部导航,使用FragmentTabHost,Fragmetn,FragmentActivity组成,代码已经打包上传了
 
1、首先,底部导航的实现,FragmentTabHost和以前的TabHost的区别就是增加了对Fragment的支持,这里的实现和其他使用TabActivity是一样的,只是选项卡的切换已经从activity变成fragment了
 
2、这里主要讲一下顶部导航的实现,为了让大家对fragment更好的理解,这里我没有采用FragmentTabHost,而是放了三个Button
 
 
 
?
package com.yyb.fragmenttest;
 
import android.os.Bundle;
import android.support.v4.app.FragmentTabHost;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
 
public class Fragment1
extends BaseFragment
implements OnClickListener{
 
    public static BaseFragment
 newInstance(int index)
 { 
        BaseFragment
 fragment = new Fragment1();
        Bundle
 args = new Bundle();
        args.putInt("index",
 index);
        fragment.setArguments(args);
        fragment.setIndex(index);
        return fragment;
    }
 
    private View
 layoutView;
    private FragmentTabHost
 mTabHost;
 
    @Override
    public void onCreate(Bundle
 savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
 
    @Override
    public View
 onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
 
        layoutView
 = inflater.inflate(R.layout.fragment_tabs, null);
         
        layoutView.findViewById(R.id.button1).setOnClickListener(this);
        layoutView.findViewById(R.id.button1).setSelected(true);
        layoutView.findViewById(R.id.button2).setOnClickListener(this);
        layoutView.findViewById(R.id.button3).setOnClickListener(this);
 
        if(savedInstanceState
 ==null){
            BaseFragment
 fragment = (BaseFragment)getChildFragmentManager().findFragmentByTag(0+"");//
 getActivity().getSupportFragmentManager().findFragmentByTag(index+""); 
            if(fragment==null){
                init(0);
            }
        }
         
        return layoutView;
    }
     
    private void init(int index)
 {
        FragmentTransaction
 ft = getChildFragmentManager().beginTransaction();
        ft.add(R.id.realtabcontent,
 Fragment11.newInstance(index) ,index+"");//将得到的fragment
 替换当前的viewGroup内容,add则不替换会依次累加
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);//设置动画效果
        ft.commit();//提交
    }
 
    @Override
    public void onClick(View
 v) {
         
        allNoSelect();
         
        switch (v.getId())
 {
        case R.id.button1:
            placeView(0);
            break;
        case R.id.button2:
            placeView(1);
            break;
        case R.id.button3:
            placeView(2);
            break;
        default:
            break;
        }
         
        v.setSelected(true);
    }
 
    private void allNoSelect()
 {
        layoutView.findViewById(R.id.button1).setSelected(false);
        layoutView.findViewById(R.id.button2).setSelected(false);
        layoutView.findViewById(R.id.button3).setSelected(false);
    }
 
    public void placeView(int index){
        BaseFragment
 fragment = (BaseFragment)<span style="color:
 #ff0000;">getChildFragmentManager()</span>.findFragmentByTag(index+"");//
 getActivity().getSupportFragmentManager().findFragmentByTag(index+""); 
        //得到一个fragment
 事务(类似sqlite的操作)
        FragmentTransaction
 ft = getChildFragmentManager().beginTransaction();
        if (fragment
 == null )
 {
            switch (index)
 {
            case 0:
                fragment
 = Fragment11.newInstance(index); 
                return;
            case 1:
                fragment
 = Fragment11.newInstance(index); 补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,