探索Fragment(3) --- Fragment跟ViewPager绑定

本文介绍了一个包含六个Tab的Android应用示例,每个Tab对应一个Fragment。通过ViewPager实现Fragment的切换,并详细展示了如何设置布局、注册点击事件及实现平滑切换效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看效果图:

写了6个title 分别对应6个fragment,现在title只是一个textView , 当然title 是一个布局,想写出啥样就啥样。不废话直接上代码:

首先6个Fragmnet的代码很简单,值显示了布局,代码如下:

<span style="font-size:18px;">public class Fragment11 extends MyBaseFragment1{
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.fragmeng1_f1, null);
		return view;
	}
	
	@Override
	public void onPause() {
		super.onPause();
	}
}
</span>
<span style="font-size:18px;">public class Fragment22 extends MyBaseFragment1{
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.fragmeng2_f2, null);
		return view;
	}
	
	@Override
	public void onPause() {
		super.onPause();
	}
	
	
}</span>
.......
<span style="font-size:18px;">public class Fragment66 extends MyBaseFragment1{
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.fragmeng6_f6, null);
		return view;
	}
	
	@Override
	public void onPause() {
		super.onPause();
	}
	
	
}</span>
<span style="font-size:18px;">对应的布局,由于都差不多就不全贴出来了:</span>
<pre name="code" class="java"><span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/darkcyan"
    >
    
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Fragment2"/>

</RelativeLayout>
</span>
</pre><span style="font-size:18px;">然后Activity的布局文件如下:</span>
<pre name="code" class="java"><span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="800dp"
        android:layout_height="80dp"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp" >

        <TextView
            android:id="@+id/title0"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@drawable/textview_bg"
            android:gravity="center"
            android:text="title 1"
            android:textColor="#ffffffff"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/title1"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@drawable/textview_bg"
            android:gravity="center"
            android:text="title 2"
            android:textColor="#ffffffff"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/title2"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@drawable/textview_bg"
            android:gravity="center"
            android:text="title 3"
            android:textColor="#ffffffff"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/title3"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@drawable/textview_bg"
            android:gravity="center"
            android:text="title 4"
            android:textColor="#ffffffff"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/title4"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@drawable/textview_bg"
            android:gravity="center"
            android:text="title 5"
            android:textColor="#ffffffff"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/title5"
            android:layout_width="150dp"
            android:layout_height="fill_parent"
            android:background="@drawable/textview_bg"
            android:gravity="center"
            android:text="title 6"
            android:textColor="#ffffffff"
            android:textSize="20sp" />
    </LinearLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/my_view_pager"
        android:layout_width="800dp"
        android:layout_height="400dp"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="100dp"
        android:background="#55444ff0" >
    </android.support.v4.view.ViewPager>

</RelativeLayout></span>
上面一排的title ,下面是ViewPager 是跟fragment绑定的

Activity中的代码如下:
<span style="font-size:18px;">package com.example.explore_fragment3;

import java.util.ArrayList;
import java.util.List;

import com.example.explore_fragment.R;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;</span>


<pre name="code" class="java"><span style="font-size:18px;">public class MainActivity3 extends FragmentActivity implements OnClickListener{
	FragmentManager mFragmentManager;
	List<Fragment>  mFragments  = new ArrayList<Fragment>();
	ViewPager mViewPager;
	MyViewAdapter adapter;
	
	TextView title0;
	TextView title1;
	TextView title2;
	TextView title3;
	TextView title4;
	TextView title5;
	TextView[] titles = new TextView[6];
	Fragment11 fragment11;
	@Override
	protected void onCreate(Bundle arg0) {
		super.onCreate(arg0);
		setContentView(R.layout.activity_main3);
		mViewPager = (ViewPager) findViewById(R.id.my_view_pager);
		mFragmentManager = getSupportFragmentManager();  //要使用V4的  manager   so 要extends fragmentActivity
		initView();
		initData();
	}
	
	private void initView() {
		title0 = (TextView) findViewById(R.id.title0);
		title1 = (TextView) findViewById(R.id.title1);
		title2 = (TextView) findViewById(R.id.title2);
		title3 = (TextView) findViewById(R.id.title3);
		title4 = (TextView) findViewById(R.id.title4);
		title5 = (TextView) findViewById(R.id.title5);
		titles[0] = title0;
		titles[1] = title1;
		titles[2] = title2;
		titles[3] = title3;
		titles[4] = title4;
		titles[5] = title5;
		
		title0.setOnClickListener(this);
		title1.setOnClickListener(this);
		title2.setOnClickListener(this);
		title3.setOnClickListener(this);
		title4.setOnClickListener(this);
		title5.setOnClickListener(this);
		
	}
	private void initData() {
		mFragments.add(new Fragment11());
		mFragments.add(new Fragment22());
		mFragments.add(new Fragment33());
		mFragments.add(new Fragment44());
		mFragments.add(new Fragment55());
		mFragments.add(new Fragment66());
		adapter = new MyViewAdapter(mFragmentManager);
		mViewPager.setAdapter(adapter);
		mViewPager.setOverScrollMode(View.OVER_SCROLL_NEVER);   // 去掉边缘阴影
		setTitles(0);
		
		
		mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int position) {
				setTitles(position);
			}
			
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				
			}
			
			@Override
			public void onPageScrollStateChanged(int arg0) {
				
			}
		});
		
		mViewPager.setPageTransformer(true, new ZoomOutPageTransformer());
	}
	
	private void setTitles(int selectItem) {
		int length = titles.length;
		for (int i = 0 ; i < length ; i++){
			if (i == selectItem){
				titles[i].setSelected(true);
			}else{
				titles[i].setSelected(false);
			}
		}
		mViewPager.setCurrentItem(selectItem);
		
	}

	public class MyViewAdapter extends FragmentStatePagerAdapter{

		public MyViewAdapter(FragmentManager fm) {
			super(fm);
		}

		@Override
		public Fragment getItem(int position) {
			return mFragments.get(position);
		}

		@Override
		public int getCount() {
			return mFragments.size();
		}
		
		@Override
		public CharSequence getPageTitle(int position) {
			return "title" + position;
		}
		
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.title0:
			setTitles(0);
			break;
		case R.id.title1:
			setTitles(1);
			break;
		case R.id.title2:
			setTitles(2);
			break;
		case R.id.title3:
			setTitles(3);
			break;
		case R.id.title4:
			setTitles(4);
			break;
		case R.id.title5:
			setTitles(5);
			break;

		default:
			break;
		}
	}
}</span>
</pre><span style="font-size:18px;"></span><pre name="code" class="java"><span style="font-size:18px;">setTitles这个方法是上面一个的title被点击是,他们的状态会被改变(被点击的是select---绿色,没有选中的是unselect---蓝色)</span>
<span style="font-size:18px;">并且使用<span style="font-family: Arial, Helvetica, sans-serif;">mViewPager.setCurrentItem(selectItem);来显示fragmeng</span></span>
</pre><span style="font-size:18px;">需要注意的是使用V4的包,主要是由于ViewPager的adater 是一个 <span style="font-family: Arial, Helvetica, sans-serif;">FragmentStatePagerAdapter这个是V4的包</span></span>
<span style="font-family:Arial, Helvetica, sans-serif;font-size:18px;">那么所有的Fragment  fragmentManager 都必须使用V4的,  使用方法跟Android.app下面的使用时一样的</span>
<span style="font-size:18px;"><span style="font-family:Arial, Helvetica, sans-serif;">要注意的是Fragment  不能使用 getFragmentManager() ,而是必须要使用FragmentActivity,所以Activity要继承FragmentActivity
</span></span><pre name="code" class="java"><span style="font-size:18px;">mViewPager.setOverScrollMode(View.OVER_SCROLL_NEVER);   // 去掉边缘阴影</span>
<span style="font-size:18px;">这个方法的作用是  当时第一页的时候不继续往左滑动或者最后一页继续往右滑动,会出现阴影,这个方法就是去掉那个阴影</span>
<span style="font-size:18px;">mViewPager.setPageTransformer(true, new ZoomOutPageTransformer());是设置Viewpager的切换效果</span>
<span style="font-size:18px;">其他的大家读一下就会明白,就不解析了</span>


源码下载地址:http://download.youkuaiyun.com/detail/hewence1/8157867

Viewpager的一些切换效果地址:http://download.youkuaiyun.com/detail/hewence1/8158047

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值