现在的位置: 首页 > 综合 > 正文

Fragment与ViewPager及PagerAdapter

2018年06月05日 ⁄ 综合 ⁄ 共 2657字 ⁄ 字号 评论关闭

这里演示的是Fragment与Viewpager结合,使用PagerAdapter这个适配器。

MainActivity.java代码:

public class MainActivity extends Activity {

	private ViewPager viewPager;
	// 表示ViewPager显示的内容
	private List<View> content;
	// 表示ViewPager显示的标题
	private List<String> title;
	private LayoutInflater inflater;
	private myPageAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.activity_main);
		
		viewPager = (ViewPager) this.findViewById(R.id.viewpager);
		
		inflater = LayoutInflater.from(this);
		
		content = new ArrayList<View>();
		
		adapter = new myPageAdapter();
		
		// 给每一个Page添加一个View
		View firstView = inflater.inflate(R.layout.first, null);
		View secondView = inflater.inflate(R.layout.second, null);
		View threeView = inflater.inflate(R.layout.three, null);
		
		content.add(firstView);
		content.add(secondView);
		content.add(threeView);
		// 给每一个页面添加标题
		// viewPager.setAdapter(arg0);
		title = new ArrayList<String>();
		title.add("体育");
		title.add("娱乐");
		title.add("新闻");
		viewPager.setAdapter(adapter);
		
		adapter.notifyDataSetChanged();
	}

	public class myPageAdapter extends PagerAdapter {

		/* 初始化Item */
		public Object instantiateItem(ViewGroup container, int position) {
			// TODO Auto-generated method stub
			((ViewPager) container).addView(content.get(position));

			return content.get(position);
		}

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

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

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO Auto-generated method stub
			return arg0 == arg1;
		}

		/* 这个方法一定要重写,否则内存会受不了 */
		public void destroyItem(ViewGroup container, int position, Object object) {
			// TODO Auto-generated method stub
			((ViewPager) container).removeView(content.get(position));
			// super.destroyItem(container, position, object);
		}
	}

}

activity_main.xml:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <!-- 看做一个普通的控件 -->

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" >

        <android.support.v4.view.PagerTitleStrip
            android:id="@+id/pagertitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top" >
        </android.support.v4.view.PagerTitleStrip>
        
    </android.support.v4.view.ViewPager>

</RelativeLayout>

三个子页面的布局很简单,就不列出。

demo结果演示:

抱歉!评论已关闭.