转载

ViewPager+Fragment实现滑动显示,且Fragment里面又放Fragment+viewPager

思路:新建一个Activity,且这个Activity要继承FragementActivity,在Activity的布局文件中放入了一个viewPager,为了效果好看,还做了个导航,使得ViewPager和导航栏能够实现联动。代码里面有解释,我就不详细介绍了!!

在往ViewPager放Fragment的时候,用到的适配器应该是FragmentPagerAdapter

导航栏的制作我是用了一个ImageView+TextView,若这时使用Imageview(或TextView)实现点击事件的话,到你点击不到ImageView(或TextView)的话,不会产生联动效果,所以我用一个LinearLayout去把ImageView和TextView包含起来,并使用LinearLayout相应点击事件,并设置ImageView和TextView不能被点击.

MainActivity.java

package com.example.administrator.viewpagerfagmentdemo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import java.util.ArrayList; import java.util.List; public class MainActivity extends FragmentActivity implements View.OnClickListener {  private ViewPager myViewPager;  //声明ViewPager  private FragmentPagerAdapter myFragmentPagerAdapter;   //Fragment适配器  private List<Fragment> myContionter;  //存放的容器  // 声明一下四个Fragment  private FirstFragment myFirstFragment;  private SecondFragment mySecondtFragment;  private ThirdFragment myThirdFragment;  private FourFragment myFourFragment;  // 声明四个ImageView  private ImageView down_first_image;  private ImageView down_second_image;  private ImageView down_third_image;  private ImageView down_four_image;  private LinearLayout first;  private LinearLayout second;  private LinearLayout third;  private LinearLayout four;  @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   initView();  //初始化各种View    initEvents(); //初始化监听事件   }  //初始化我们需要用到的View  public void initView(){   myViewPager = (ViewPager) findViewById(R.id.viewPager);   down_first_image = (ImageView) findViewById(R.id.down_music);   down_second_image = (ImageView) findViewById(R.id.down_icon);   down_third_image = (ImageView) findViewById(R.id.down_people);   down_four_image = (ImageView) findViewById(R.id.down_shoot);   first = (LinearLayout) findViewById(R.id.first);   second = (LinearLayout) findViewById(R.id.second);   third = (LinearLayout) findViewById(R.id.third);   four = (LinearLayout) findViewById(R.id.four);   //初始化Fragment   myFirstFragment = new FirstFragment();   mySecondtFragment = new SecondFragment();   myThirdFragment = new ThirdFragment();   myFourFragment = new FourFragment();   //初始化容器   myContionter = new ArrayList<>();   myContionter.add(myFirstFragment);   myContionter.add(mySecondtFragment);   myContionter.add(myThirdFragment);   myContionter.add(myFourFragment);   //初始化 适配器   myFragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {    @Override    public Fragment getItem(int i) {     return myContionter.get(i);    }    @Override    public int getCount() {     return myContionter.size();    }   };   myViewPager.setAdapter(myFragmentPagerAdapter);   //设置监听器,没什么服用价值,就直接匿名内部类了   myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {    @Override    public void onPageScrolled(int i, float v, int i2) {    }    //当 界面 切换 的时候    @Override    public void onPageSelected(int position) {     initImageViewBackGround();   //图片先置为暗色     switch (position){      case 0:       down_first_image.setBackgroundResource(R.drawable.shake_icon_music_pressed);       break;      case 1:       down_second_image.setBackgroundResource(R.drawable.notification_icon);       break;      case 2:       down_third_image.setBackgroundResource(R.drawable.shake_icon_people_pressed);       break;      case 3:       down_four_image.setBackgroundResource(R.drawable.sns_shoot_location_pressed);       break;     }    }    @Override    public void onPageScrollStateChanged(int i) {    }   });   //这俩 得对应起来   myViewPager.setCurrentItem(0);   down_first_image.setBackgroundResource(R.drawable.shake_icon_music_pressed);  }  //初始化 监听事件  private void initEvents() { //  down_first_image.setOnClickListener(this); //  down_second_image.setOnClickListener(this); //  down_third_image.setOnClickListener(this); //  down_four_image.setOnClickListener(this);    first.setOnClickListener(this);   second.setOnClickListener(this);   third.setOnClickListener(this);   four.setOnClickListener(this);  }  //监听事件的方法  @Override  public void onClick(View v) {   initImageViewBackGround();  //先设置图片为亮色   switch (v.getId()){    case R.id.first:     myViewPager.setCurrentItem(0);     down_first_image.setBackgroundResource(R.drawable.shake_icon_music_pressed);     break;    case R.id.second:     myViewPager.setCurrentItem(1);     down_second_image.setBackgroundResource(R.drawable.notification_icon);     break;    case R.id.third:     myViewPager.setCurrentItem(2);     down_third_image.setBackgroundResource(R.drawable.shake_icon_people_pressed);     break;    case R.id.four:     myViewPager.setCurrentItem(3);     down_four_image.setBackgroundResource(R.drawable.sns_shoot_location_pressed);     break;   }  }  //初始化图片都为暗色  private void initImageViewBackGround(){   down_first_image.setBackgroundResource(R.drawable.shake_icon_music_normal);   down_second_image.setBackgroundResource(R.drawable.notification_icon_gray);   down_third_image.setBackgroundResource(R.drawable.shake_icon_people_normal);   down_four_image.setBackgroundResource(R.drawable.sns_shoot_location_normal);  } } 

activity_main.xml

<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=".MainActivity">  <LinearLayout   android:layout_width="match_parent"   android:layout_height="40dp"   android:gravity="center"   android:background="@color/title_background">   <TextView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_gravity="center"    android:textColor="@color/title_text_color"    android:text="微信"/>  </LinearLayout>  <android.support.v4.view.ViewPager   android:id="@+id/viewPager"   android:layout_width="wrap_content"   android:layout_height="0dp"   android:layout_weight="1">  </android.support.v4.view.ViewPager>  <LinearLayout   android:layout_width="match_parent"   android:layout_height="50dp"   android:background="@drawable/abc_list_selector_disabled_holo_light"   android:orientation="horizontal">   <LinearLayout    android:id="@+id/first"    android:layout_width="0dp"    android:layout_height="match_parent"    android:orientation="vertical"    android:layout_weight="1"    android:gravity="center">    <ImageView     android:id="@+id/down_music"     android:layout_width="wrap_content"     android:layout_height="0dp"     android:layout_weight="2"     android:clickable="false"     android:background="@drawable/shake_icon_music_normal"/>    <TextView     android:layout_width="wrap_content"     android:layout_height="0dp"     android:textColor="#000"     android:layout_weight="1"     android:clickable="false"     android:text="音乐"/>   </LinearLayout>   <LinearLayout    android:id="@+id/second"    android:layout_width="0dp"    android:layout_height="match_parent"    android:orientation="vertical"    android:layout_weight="1"    android:gravity="center">    <ImageView     android:id="@+id/down_icon"     android:layout_width="wrap_content"     android:layout_height="0dp"     android:layout_weight="2"     android:clickable="false"     android:background="@drawable/notification_icon_gray"/>    <TextView     android:layout_width="wrap_content"     android:layout_height="0dp"     android:textColor="#000"     android:layout_weight="1"     android:clickable="false"     android:text="哈哈"/>   </LinearLayout>   <LinearLayout    android:id="@+id/third"    android:layout_width="0dp"    android:layout_height="match_parent"    android:orientation="vertical"    android:layout_weight="1"    android:gravity="center">    <ImageView     android:id="@+id/down_people"     android:layout_width="wrap_content"     android:layout_height="0dp"     android:layout_weight="2"     android:clickable="false"     android:background="@drawable/shake_icon_people_normal"/>    <TextView     android:layout_width="wrap_content"     android:layout_height="0dp"     android:textColor="#000"     android:layout_weight="1"     android:clickable="false"     android:text="好友"/>   </LinearLayout>   <LinearLayout    android:id="@+id/four"    android:layout_width="0dp"    android:layout_height="match_parent"    android:layout_weight="1"    android:orientation="vertical"    android:gravity="center">    <ImageView     android:id="@+id/down_shoot"     android:layout_width="wrap_content"     android:layout_height="0dp"     android:layout_weight="2"     android:clickable="false"     android:background="@drawable/sns_shoot_location_normal"/>    <TextView     android:layout_width="wrap_content"     android:layout_height="0dp"     android:textColor="#000"     android:layout_weight="1"     android:clickable="false"     android:text="啦啦"/>   </LinearLayout>  </LinearLayout> </LinearLayout> 

建立四个Fragment,这四个Fragment都是一样,在这里我就贴出一个代码,并且我还在这个Frament中又放了ViewPager,在这个viewPager中我又放了Fragment,那么这是你在设置Fragment里面viewPager的适配器的时候,需要用到FragmentPagerAdapter,那么这里穿进去的参数应该是getChildFragmentManager(),否则会报错。

Fragment.java

package com.example.administrator.viewpagerfagmentdemo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import java.util.List; /**  * Created by Administrator on 2015/9/2.  */ public class FirstFragment extends Fragment {  private ViewPager myViewPager;  private List<View> myContiontar ;   //viewPager的数据源  private PagerAdapter myPagerAdapter;   //有了数据源,必然要有适配器  private FragmentPagerAdapter fragmentPagerAdapter;  private List<Fragment> list;  private View view;  //Fragment的布局  private Lunboa lunboa;  private Lunbob lunbob;  private Lunboc lunboc;  private Lunbod lunbod;  @Override  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {   view = inflater.inflate(R.layout.first_fragment,null);   initViews();  //初始化各种View   return view;  }  //初始化各种View  private void initViews(){   // 先将xml文件 换成 view   myViewPager = (ViewPager) view.findViewById(R.id.first_fragment_viewpager);   //建立五个view 去获得四个ImageView   View view1 = LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.lunbo_image1,null);   View view2 = LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.lunbo_image2,null);   View view3 = LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.lunbo_image3,null);   View view4 = LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.lunbo_image4,null);   View view5 = LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.lunbo_image5,null);   //加入到容器里面   myContiontar = new ArrayList<>();   myContiontar.add(view1);   myContiontar.add(view2);   myContiontar.add(view3);   myContiontar.add(view4);   myContiontar.add(view5);   lunboa = new Lunboa();   lunbob = new Lunbob();   lunboc = new Lunboc();   lunbod = new Lunbod();   list = new ArrayList<>();   list.add(lunboa);   list.add(lunbob);   list.add(lunboc);   list.add(lunbod);   //fragmentPagerAdapter   fragmentPagerAdapter = new FragmentPagerAdapter(getFragmentManager()) {    @Override    public Fragment getItem(int i) {     return list.get(i);    }    @Override    public int getCount() {     return list.size();    }   };   //初始化 适配器   myPagerAdapter = new PagerAdapter() {    //返回显示多少项    @Override    public int getCount() {     return myContiontar.size();    }    @Override    public boolean isViewFromObject(View view, Object o) {     return view == o;    }    //滑动切换时,移除当前组件    @Override    public void destroyItem(ViewGroup container, int position, Object object) {     container.removeView(myContiontar.get(position));    }    //每次滑动时生成的组件    @Override    public Object instantiateItem(ViewGroup container, int position) {     container.addView(myContiontar.get(position));     return myContiontar.get(position);    }   };   //设置适配器   myViewPager.setAdapter(myPagerAdapter);   //设置fragment适配器 //  myViewPager.setAdapter(fragmentPagerAdapter);  } } 

布局文件fragment.xml也很简单,不多说了,我就直接上代码了。

<?xml version="1.0" encoding="utf-8"?> <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:orientation="vertical"  android:layout_width="match_parent"  android:layout_height="match_parent">  <FrameLayout   android:layout_width="match_parent"   android:layout_height="0dp"   android:layout_weight="1"   android:orientation="vertical"   android:gravity="center|bottom">   <android.support.v4.view.ViewPager    android:id="@+id/first_fragment_viewpager"    android:layout_width="match_parent"    android:layout_height="match_parent">   </android.support.v4.view.ViewPager>   <LinearLayout    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:orientation="horizontal"    android:layout_gravity="center|bottom">    <ImageView     android:id="@+id/first_fragment_down_image1"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:background="@drawable/wallet_coin_purse_guide_purse_dot_normal"/>    <ImageView     android:id="@+id/first_fragment_down_image2"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:background="@drawable/wallet_coin_purse_guide_purse_dot_normal"/>    <ImageView     android:id="@+id/first_fragment_down_image3"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:background="@drawable/wallet_coin_purse_guide_purse_dot_normal"/>    <ImageView     android:id="@+id/first_fragment_down_image4"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:background="@drawable/wallet_coin_purse_guide_purse_dot_normal"/>    <ImageView     android:id="@+id/first_fragment_down_image5"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:background="@drawable/wallet_coin_purse_guide_purse_dot_normal"/>    </LinearLayout>  </FrameLayout>  <ImageView   android:layout_width="match_parent"   android:layout_height="0dp"   android:layout_weight="2.5"   android:background="@color/fitst_fragment_image_color"/> </LinearLayout> 

效果图:

ViewPager+Fragment实现滑动显示,且Fragment里面又放Fragment+viewPager

正文到此结束
Loading...