`
hzy3774
  • 浏览: 992927 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Android控件ViewPager与Fragment基础用法

 
阅读更多

    ViewPager与Fragment实现页面滑动效果:



    首先继承FragmentActivity,

    为ViewPager提供展示所需的Fragment和FragmentPagerAdapter:

Fragment来指定页面的布局以及功能

	// fragment
	private class MyFragment extends Fragment {

		private String text;
		private int color;

		public MyFragment(String text, int color) {
			this.text = text;
			this.color = color;
		}

		@Override
		public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
			TextView tv = new TextView(MainActivity.this);
			tv.setBackgroundColor(color);
			tv.setText(text);
			return tv;
		}
	}

 adapter指定该Viewpager有多少页面以及那个位置需要显示哪个页面:

// adapter
	private class MyAdapter extends FragmentPagerAdapter {
		public MyAdapter(FragmentManager fm) {
			super(fm);
		}

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

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

设置OnPageChangeListener,指定页面改变时需要做什么其他操作:

	@Override
	public void onPageScrollStateChanged(int arg0) {

	}

	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
		LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) tabline.getLayoutParams();
		lp.leftMargin = (int) ((arg0 + arg1) * mTabLineWidth);
		tabline.setLayoutParams(lp);
	}

	@Override
	public void onPageSelected(int arg0) {
		// set titles
		for (int i = 0; i < titles.size(); i++) {
			if (arg0 == i) {
				titles.get(i).setSelected(true);
			} else {
				titles.get(i).setSelected(false);
			}
		}
	}

 完整的代码:

package com.hzy.myviewpager;

import java.util.ArrayList;

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.hzy.myviewpager.R.id;

public class MainActivity extends FragmentActivity implements OnPageChangeListener, OnClickListener {

	ViewPager pager = null;
	View tabline = null;
	private int mTabLineWidth;

	// titles
	TextView title1 = null;
	TextView title2 = null;
	TextView title3 = null;

	ArrayList<TextView> titles = null;
	ArrayList<Fragment> pages = null;

	@Override
	protected void onCreate(Bundle arg0) {
		super.onCreate(arg0);
		initView();
		initTabline();
	}

	private void initView() {
		setContentView(R.layout.activity_main);
		pages = new ArrayList<Fragment>();
		titles = new ArrayList<TextView>();

		pager = (ViewPager) findViewById(id.main_viewpager);
		title1 = (TextView) findViewById(id.main_tab1);
		title2 = (TextView) findViewById(id.main_tab2);
		title3 = (TextView) findViewById(id.main_tab3);

		title1.setOnClickListener(this);
		title2.setOnClickListener(this);
		title3.setOnClickListener(this);

		titles.add(title1);
		titles.add(title2);
		titles.add(title3);

		// create new fragments
		pages.add(new MyFragment("tab1", Color.BLUE));
		pages.add(new MyFragment("tab2", Color.RED));
		pages.add(new MyFragment("tab3", Color.CYAN));

		// set adapter
		pager.setAdapter(new MyAdapter(getSupportFragmentManager()));
		pager.setOnPageChangeListener(this);
		pager.setCurrentItem(0);
		titles.get(0).setSelected(true);
	}

	// tablines
	private void initTabline() {
		tabline = findViewById(id.main_tab_line);
		Display display = getWindow().getWindowManager().getDefaultDisplay();
		DisplayMetrics outMetrics = new DisplayMetrics();
		display.getMetrics(outMetrics);
		mTabLineWidth = outMetrics.widthPixels / 3;
		LayoutParams lp = tabline.getLayoutParams();
		lp.width = mTabLineWidth;
		tabline.setLayoutParams(lp);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case id.main_tab1:
			pager.setCurrentItem(0, true);
			break;
		case id.main_tab2:
			pager.setCurrentItem(1, true);
			break;
		case id.main_tab3:
			pager.setCurrentItem(2, true);
			break;
		default:
			break;
		}
	}

	@Override
	public void onPageScrollStateChanged(int arg0) {

	}

	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
		LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) tabline.getLayoutParams();
		lp.leftMargin = (int) ((arg0 + arg1) * mTabLineWidth);
		tabline.setLayoutParams(lp);
	}

	@Override
	public void onPageSelected(int arg0) {
		// set titles
		for (int i = 0; i < titles.size(); i++) {
			if (arg0 == i) {
				titles.get(i).setSelected(true);
			} else {
				titles.get(i).setSelected(false);
			}
		}
	}

	// fragment
	private class MyFragment extends Fragment {

		private String text;
		private int color;

		public MyFragment(String text, int color) {
			this.text = text;
			this.color = color;
		}

		@Override
		public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
			TextView tv = new TextView(MainActivity.this);
			tv.setBackgroundColor(color);
			tv.setText(text);
			return tv;
		}
	}

	// adapter
	private class MyAdapter extends FragmentPagerAdapter {
		public MyAdapter(FragmentManager fm) {
			super(fm);
		}

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

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

 代码中通过实现OnPageChangeListener接口手动设置了页面指示条的位置

  • 大小: 77 KB
分享到:
评论

相关推荐

    Android实现ViewPager+Fragment左右滑动

    在Android开发中,`ViewPager`和`Fragment`的结合使用是一种常见的实现屏幕间左右滑动切换的机制。这种设计模式可以提供高效的用户体验,使得用户在多个内容之间进行平滑的过渡,常见于应用的引导页、TabLayout或者...

    viewpager+fragment左右滑动实现动态加载数据。动态刷新fragment

    在Android开发中,`ViewPager`和`Fragment`的结合使用是一种常见的实现页面滑动切换的手段,尤其适用于创建带有多个视图的复杂界面。`ViewPager`允许用户通过水平滑动来浏览相邻的`Fragment`,而`Fragment`则用于...

    ViewPager和Fragment的结合使用

    在Android应用开发中,ViewPager和Fragment是两个非常重要的组件,它们常常被结合使用来实现丰富的用户界面和交互体验。ViewPager允许用户左右滑动查看多个页面,而Fragment则为应用程序提供了模块化屏幕区域,使得...

    ViewPager+Fragment_Demo

    【ViewPager+Fragment_Demo】是一个基于Android开发的项目示例,它展示了如何使用ViewPager和Fragment来构建一个功能完善的Tab导航栏。在Android应用设计中,Tab导航是一种常见的用户界面模式,用于展示多个相关的...

    Android应用源码之Android ViewPager Fragment实现选项卡.zip

    总的来说,这个源码实例展示了如何在Android应用中使用ViewPager和Fragment来创建选项卡式界面,这对Android开发者来说是一项基础且重要的技能。通过学习和理解这个例子,你可以更好地掌握Android应用的界面交互设计...

    viewpager和fragment 搭配使用

    当ViewPager与Fragment结合使用时,通常我们会创建一个FragmentPagerAdapter或FragmentStatePagerAdapter作为ViewPager的数据适配器。这两个适配器都继承自PagerAdapter,但它们在处理Fragment的生命周期上有所不同...

    Android ViewPager+Fragment超高仿微信主界面

    要使用ViewPager,首先需要在布局XML文件中添加ViewPager控件,然后在Activity或Fragment中设置适配器,如`FragmentPagerAdapter`或`FragmentStatePagerAdapter`,适配器负责为ViewPager提供页面内容。 **2. ...

    ViewPager与Fragment混用

    在Android应用开发中,ViewPager和Fragment是两个非常重要的组件,它们常常被一起使用来构建复杂的用户界面,尤其是对于实现滑动页面切换效果时。本文将深入探讨如何在项目中有效地结合ViewPager与Fragment,以及...

    ViewPager + Fragment小Demo

    `ViewPager`是Android SDK中的一个控件,它允许用户左右滑动页面来查看多个视图,而`Fragment`则是Android应用中用于构建可动态组合的UI组件。在本`ViewPager + Fragment`小Demo中,我们将深入探讨如何将这两个组件...

    TabLayout+ViewPager+Fragment实现分页滑动效果Demo

    通过这个Demo,你不仅学习了如何使用`TabLayout`、`ViewPager`和`Fragment`实现分页滑动,还了解了如何组织和管理Android应用中的UI组件。此外,你还可以进一步扩展这个Demo,例如添加自定义`Tab`图标、动态加载`...

    viewpager+fragment滑动页面框架

    `ViewPager` 与 `Fragment` 结合使用时,通常会借助 `FragmentPagerAdapter` 或 `FragmentStatePagerAdapter` 这两个适配器类。`FragmentPagerAdapter` 适用于页面数量较少并且不会动态改变的情况,它会一次性加载...

    BottomBar+ViewPager+Fragment

    在Android应用开发中,"BottomBar+ViewPager+Fragment"是一种常见的设计模式,用于构建具有底部导航栏的应用界面。这种设计可以提供多个主视图之间的平滑切换,为用户带来便捷的交互体验。以下是对这个主题的详细...

    ViewPager和Fragment结合实现页面滑动,以及欢迎页

    【标题】:在Android开发中,ViewPager和Fragment的结合使用是构建动态、可滑动页面的常见技术。这种组合能够创建出类似应用启动时的欢迎页效果,类似于新浪的欢迎界面,提供用户友好的交互体验。 【描述】:...

    android中ViewPager结合Fragment进行无限滑动

    ViewPager 是 Android 中的一种滑动控件,用于实现多个页面之间的滑动切换,而 Fragment 则是 Android 中的一种组件,用于实现屏幕上的一个独立的界面单元。 要实现无限滑动,我们需要使用 FragmentPagerAdapter 来...

    Android五分钟让你集成底部菜单栏(fragment与fragment+viewpager)

    本教程将详细介绍如何在Android项目中集成使用Fragment和Fragment + ViewPager的底部菜单栏。 首先,理解Fragment是Android中的一个关键组件,它代表了界面的一部分,可以在Activity之间复用,提供了模块化设计的...

    ViewPager + fragment + RecyclerView

    在Android开发中,`ViewPager`、`Fragment`和`RecyclerView`是三个非常重要的组件,它们在构建复杂的用户界面,特别是涉及到页面滑动和数据展示时,发挥着关键作用。本篇将深入探讨这三个组件的使用及其结合方式。 ...

    开源中国源码学习UI篇(三)之ViewPager+Fragment的使用分析

    在Android应用开发中,`ViewPager`是一个非常重要的组件,它允许用户通过左右滑动来浏览多个页面,通常与`Fragment`结合使用以实现更灵活的界面布局和交互。本篇文章将深入探讨`ViewPager`和`Fragment`在开源中国...

    Android ViewPager+Fragment实现QQ界面-IT计算机-毕业设计.zip

    本项目"Android ViewPager+Fragment实现QQ界面"就是针对这一功能的一个实践示例,适合计算机科学与技术专业的学生进行毕业设计学习。 首先,ViewPager是Android Support Library中的一个控件,它通过适配器...

    viewpager与fragment配合+左拉抽屉效果sliding+fragment与activity通讯

    在Android应用开发中,Viewpager和Fragment的配合使用已经成为一种常见的设计模式,它使得用户界面更加灵活和互动。本文将详细讲解如何实现标题所描述的功能,包括“viewpager与fragment配合”、“左拉抽屉效果...

Global site tag (gtag.js) - Google Analytics