ViewPager+Fragment滑動切換頁面(RadioButton底部導航欄)

      Activity要繼承FragementActivity,在Activity的佈局文件中放入了一個ViewPager,爲了效果好看,還做了個導航,使得ViewPager和導航欄能夠實現聯動,即ViewPager滑動切換頁面和點擊導航欄切換頁面,導航欄我使用的RadioButton,也可以使用其他的。   


    首先,我們需要在主佈局文件中activity_main.xml 放一個 ViewPager,底部導航欄使用RedioButton切換頁面,每一個RadioButton都使用了選擇器進行圖片與字體的變化


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.lin.ui.MainActivity" 
    android:weightSum="9">
     

    <android.support.v4.view.ViewPager
        android:id="@+id/vp_viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="7.5"/>


  <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1.5"
        android:gravity="center"
        android:orientation="horizontal">


        <RadioGroup
            android:id="@+id/radioGroup"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="horizontal">


            <RadioButton
                android:id="@+id/rb_a"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_gravity="right"
                android:layout_weight="1"
                android:button="@null"
                android:checked="true"
                android:drawableTop="@drawable/rabtn_a_selector"
                android:textColor="@drawable/rabtn_a_selector"
                android:gravity="center"
                android:text="首頁"/>

            <RadioButton
                android:id="@+id/rb_b"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:button="@null"
                android:checked="false"
                android:drawableTop="@drawable/rabtn_b_selector"
                android:textColor="@drawable/rabtn_b_selector"
                android:gravity="center"
                android:text="購物車"/>

            <RadioButton
                android:checked="false"
                android:id="@+id/rb_c"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:button="@null"
                android:drawableTop="@drawable/rabtn_c_selector"
                android:textColor="@drawable/rabtn_c_selector"
                android:gravity="center"
                android:text="消息"/>

            <RadioButton
                android:checked="false"
                android:id="@+id/rb_d"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:layout_weight="1"
                android:button="@null"
                android:drawableTop="@drawable/rabtn_d_selector"
                android:textColor="@drawable/rabtn_d_selector"
                android:gravity="center"
                android:text="我的"/>

        </RadioGroup>

    </LinearLayout>

</LinearLayout>

  四個相同選擇器文件rabtn_a_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/a_0" android:state_checked="false" android:color="@color/gray"/>
    <item android:drawable="@drawable/a_1" android:state_checked="true" android:color="@color/bule"/>
</selector>
然後,在對應的MainActivity.Java文件

package com.lin.ui;

import java.util.ArrayList;

import com.lin.adapter.MyViewPager;
import com.test.fragment.FragmentA;
import com.test.fragment.FragmentB;
import com.test.fragment.FragmentC;
import com.test.fragment.FragmentD;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class MainActivity extends FragmentActivity {
  /** 
    * 導航按鈕 
    */ 
  private RadioGroup radioGroup;
  /** 
   * 作爲頁面容器的ViewPager 
   */
  private ViewPager vp_viewpager;  
  /** 
   * 頁面集合 
   */  
  private ArrayList<Fragment> arrayList;
  /** 
   * 四個Fragment(頁面) 
   */  
  private FragmentA a;
  private FragmentB b;
  private FragmentC c;
  private FragmentD d;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		
	}
	@SuppressWarnings("deprecation")
	private void initView() {
		arrayList=new ArrayList<Fragment>();
		a=new FragmentA();
		arrayList.add(a);
		
		b=new FragmentB();
		arrayList.add(b);
		
		c=new FragmentC();
		arrayList.add(c);
		
		d=new FragmentD();
		arrayList.add(d);
		
		vp_viewpager=(ViewPager) findViewById(R.id.vp_viewpager);
		
		vp_viewpager.setAdapter(new MyViewPager(getSupportFragmentManager(), arrayList));
		vp_viewpager.setCurrentItem(0); //設置當前頁是第一頁.setCurrentItem(0); //設置當前頁是第一頁
		vp_viewpager.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int arg0) {
				switch (arg0) {
				  case 0:
					  radioGroup.check(R.id.rb_a);
					break;
				  case 1:
					  radioGroup.check(R.id.rb_b);
						break;
				  case 2:
					  radioGroup.check(R.id.rb_c);
						break;
				  case 3:
					  radioGroup.check(R.id.rb_d);
						break;

				default:
					break;
				}
				
			}
			
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onPageScrollStateChanged(int arg0) {
				// TODO Auto-generated method stub
				
			}
		});
		
		 
		  radioGroup=(RadioGroup) findViewById(R.id.radioGroup);
		  radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
				@Override
				public void onCheckedChanged(RadioGroup group, int arg1) {
				       //遍歷RadioGroup 裏面所有的子控件。
	                for (int index = 0; index < group.getChildCount(); index++) {
	                    //獲取到指定位置的RadioButton
	                    RadioButton rb = (RadioButton)group.getChildAt(index);
	                  //如果被選中
	                    if (rb.isChecked()) {  
	                    	
	                    	vp_viewpager.setCurrentItem(index);
	                    	
	                        break;
	                    }
	                }
					
				}
			});
		
	}


}


 四個相同的Fragment文件,對應的xml就放了一個文本就不貼出來了

package com.test.fragment;



import com.lin.ui.R;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentA extends Fragment{
  private View view;
	// 單例(方法二)
	private static FragmentA fa;
	public static FragmentA getFragmentA() {
		if (fa == null) {
			fa = new FragmentA();
		}
		return fa;
	}
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
	   view= inflater.inflate(R.layout.fragment_a, container, false);
      return   view;
  }
  
}


自定義一個ViewPager的適配器


package com.lin.adapter;

import java.util.ArrayList;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;



public class MyViewPager extends FragmentPagerAdapter{
   private ArrayList<Fragment> arrayList;
   private FragmentManager fm;  //創建FragmentManager
	public MyViewPager(FragmentManager fm,ArrayList<Fragment> arrayList) {
		super(fm);
		this.arrayList=arrayList;
		this.fm=fm;
	}

	@Override
	public Fragment getItem(int arg0) {
		
		return arrayList.get(arg0);
	}

	@Override
	public int getCount() {
		return arrayList.size();
	}



}


效果圖如下:






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章