0
点赞
收藏
分享

微信扫一扫

Android-ViewPager(FragmentPagerAdapter 和 FragmentStatePagerAdapter)


1.回顾

   上篇 使用了 PagerAdapter实现 ViewPager 

2.重点

   (1)FragmentPagerAdapter  实现 ViewPager

   (2)FragmentStatePagerAdapter 实现 ViewPager

   (3)操作 Viewpager上的页面


3.说明

  (1) PagerAdapter 数据源 List<View>

  (2)FragmentPagerAdapter  数据源  List<Fragment>  :
            这种方式 将 fragment 全部加载到页面里了,操作的Activity 需要 继承 FragmentActivity

  (3)FragmentStatePagerAdapter  数据源 List<Fragment> 


4.FragmentPagerAdapter  实现 ViewPager

   4.1 效果图

                                            

Android-ViewPager(FragmentPagerAdapter 和 FragmentStatePagerAdapter)_FragmentStatePagerAd

    4.2 Activity 实现

       注意 ,使用 fragment实现 ,Activity 不是 继承 Activity 了,而是 继承 FragmentActivity !!! 

        Activity 布局文件  : 实现 viewpager 布局:


<android.support.v4.view.ViewPager
android:layout_marginTop="20dp"
android:id="@+id/frag_viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

>

<android.support.v4.view.PagerTabStrip
android:id="@+id/page_tabs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
>

</android.support.v4.view.PagerTabStrip>

</android.support.v4.view.ViewPager>


    4.3 adapter实现

     注意 需要 继承的是 FragmentPagerAdapter 而不是 PagerAdapter


package com.example.Adapter;

import java.util.List;

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

public class FragvpAdapter extends FragmentPagerAdapter {

/*
* 注意 使用的时候 ,activity 不是 继承Activity 而是 继承 FragmentActivity
*/

private List<Fragment> frags;
private List<String> titles;

public FragvpAdapter(FragmentManager fm,List<Fragment> frags,List<String> titles) {
super(fm);
//构造方法初始化
this.frags=frags;
this.titles=titles;
}

@Override
public Fragment getItem(int arg0) {
//item
return frags.get(arg0);
}

@Override
public int getCount() {
// 长度
return frags.size();
}

@Override
public CharSequence getPageTitle(int position) {
// 添加标题
return titles.get(position);
}


}


    4.4 新建 4个 Fragment 

           继承自 Fragment ; 可以看博客:

       每个 Fragment,都是 一个ViewPager页面,可以通过 Fragment 实现 没有 ViewPager页面控件控制和 业务实现;

package com.example.fragment;

import com.example.studydemo1.R;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class Fragment1 extends Fragment {

private Button btn_one_pager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view=inflater.inflate(R.layout.viewpager1, container,false);
btn_one_pager=(Button) view.findViewById(R.id.btn_one_pager);
btn_one_pager.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getActivity(), "VerpagerTestActivity 执行了",Toast.LENGTH_SHORT).show();

}
});
return view;
}

}



    4.5 Activity 业务实现

         这里实现了OnPagerChangeListener ;实现监听页面切换;

package com.example.studydemo1;

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

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.PagerTitleStrip;
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.Button;
import android.widget.Toast;

import com.example.Adapter.FragvpAdapter;
import com.example.fragment.Fragment1;
import com.example.fragment.Fragment2;
import com.example.fragment.Fragment3;
import com.example.fragment.Fragment4;
import com.example.studydemo1.ViewPager1Activity.btn_one_pagerClickListener;

public class FragvpagerActivity extends FragmentActivity {

private ViewPager frag_viewpager;

//这里定义 可以设置样式
private PagerTabStrip page_tabs;



//标题数据源
private List<String> titles;

//Fragment 数据源
private List<Fragment> frags;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragvpager);
frag_viewpager=(ViewPager) findViewById(R.id.frag_viewpager);
page_tabs=(PagerTabStrip) findViewById(R.id.page_tabs);


//准备 标题数据源
titles=new ArrayList<String>();
titles.add("第一页面");
titles.add("第二页面");
titles.add("第三页面");
titles.add("第四页面");
//准备页面数据源
frags=new ArrayList<Fragment>();
frags.add(new Fragment1());
frags.add(new Fragment2());
frags.add(new Fragment3());
frags.add(new Fragment4());

//准备适配器
FragvpAdapter fragvpAdapter=new FragvpAdapter(getSupportFragmentManager(), frags, titles);

//添加适配

frag_viewpager.setAdapter(fragvpAdapter);
frag_viewpager.setOnPageChangeListener(new pagerChangerListener());

}

class pagerChangerListener implements OnPageChangeListener{

@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub

}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub

}

@Override
public void onPageSelected(int arg0) {
//第几个 页面
Toast.makeText(getApplicationContext(), "当前第"+arg0+"界面",Toast.LENGTH_SHORT).show();

}

}

}


   4.6 注意

       在使用 FragmentPagerAdapter 实现的时候,是直接将所有的 Fragment 加载到了 Activity ; 没有动态添加页面和销毁页面;


5.FragmentStatePagerAdapter 实现 ViewPager

FragmentStatePagerAdapter 实现;和FragmentPagerAdapter 实现 基本上 一样:

    使用方法:

FragmentStatePagerAdapter

        (2)重写 instantiateItem(ViewGroup arg0, int arg1)  方法

        (3)重写 destroyItem(ViewGroup container, int position, Object object) 方法

   例子:

        (4)已三个一组加载 页面 和 pagerAdapter 这一点一样

package com.example.Adapter;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;

public class FragStatevpAdapter extends FragmentStatePagerAdapter {


private List<Fragment> frags;
private List<String> titles;

public FragStatevpAdapter(FragmentManager fm,List<Fragment> frags,List<String> titles) {
super(fm);
this.frags=frags;
this.titles=titles;
}

@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return frags.get(arg0);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return frags.size();
}

/**
* 创建
* 不需要改写
*/
@Override
public Object instantiateItem(ViewGroup arg0, int arg1) {
// TODO Auto-generated method stub
return super.instantiateItem(arg0, arg1);
}

/**
* 销毁
* 不需要改写
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
super.destroyItem(container, position, object);
}

/**
* 标题
*/
@Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titles.get(position);
}

}


6.总结

每个 Fragment,都是 一个ViewPager页面,可以通过 Fragment 实现 没有 ViewPager页面控件控制和 业务实现;

  

  (2)总的来说 ,到此为止,一共学习了 6个 adapter : SimpleAdapter , ArrayAdapter , BaseAdapter , PagerAdapter ,FragmentPagerAdapter 和 FragmentStatePagerAdapter

  7.demo 免积分下载



 

 

举报

相关推荐

0 条评论