159.n1-点击RadioGroup切换ViewPager
来源:互联网 发布:午夜美女软件 编辑:程序博客网 时间:2024/06/05 10:08
ViewPager有滑动的功能,因为需要实现的是点击切换,因此需要吧ViewPager的滑动频闭。初始化每一个按钮对应的ViewPager的时候,是使用的对RadioGroup的监听,当某一个被选中的时候就设置当前页可以看见,同时初始化页面的数据是对ViewPager的监听,判断当前的页面是否被选中,被选中了就初始化当前页面的数据,还有一点需要注意ViewPager的pager.initData()这个方法会预加载数据,也就是显示第一个页面的时候会初始化第二个页面的数据,这样引起了状态的混淆,因此,最好是使用监听ViewPager是否选中来初始化数据。
监听和初始化的方法如下:
//监听rg_group的点击事件切换屏幕rg_group.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {// 根据checkedId来判断显示哪一个switch(checkedId){case R.id.rb_home:// mViewPager.setCurrentItem(0);// 设置当前页面mViewPager.setCurrentItem(0, false);// false参数的作用是去掉切换页面的动画break;case R.id.rb_news:mViewPager.setCurrentItem(1, false);// 设置当前页面break;case R.id.rb_smart:mViewPager.setCurrentItem(2, false);// 设置当前页面break;case R.id.rb_gov:mViewPager.setCurrentItem(3, false);// 设置当前页面break;case R.id.rb_setting:mViewPager.setCurrentItem(4, false);// 设置当前页面break;default:break;}}});//监听mViewPager对象,来切换动画,当前的ViewPager被选中以后,就初始化该页面的数据mViewPager.setOnPageChangeListener(new OnPageChangeListener(){@Overridepublic void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {// TODO Auto-generated method stub}@Overridepublic void onPageSelected(int position) {// 获取当前被选中的页面, 初始化该页面数据mPagerList.get(position).initData();}@Overridepublic void onPageScrollStateChanged(int state) {// TODO Auto-generated method stub}});// 初始化首页数据,因为页面点击的时候才会初始化数据,因此刚进入的时候,第一页没有初始化,需要手动初始化数据mPagerList.get(0).initData();}
fragment_content.xml主页内容的页面的布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- 内容栏 --> <!-- 上边的内容栏 --> <!-- 继承一个不能滑动的ViewPager --><com.ldw.news.view.NoScrollViewPager android:id="@+id/vp_content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /><!-- 下边的点击栏 --><RadioGroup android:id="@+id/rg_group" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bottom_tab_bg" android:orientation="horizontal" > <RadioButton android:id="@+id/rb_home" style="@style/BottomTabStyle" android:drawableTop="@drawable/btn_tab_home_selector" android:text="首页" /><RadioButton android:id="@+id/rb_news" style="@style/BottomTabStyle" android:drawableTop="@drawable/btn_tab_news_selector" android:text="新闻中心" /> <RadioButton android:id="@+id/rb_smart" style="@style/BottomTabStyle" android:drawableTop="@drawable/btn_tab_smart_selector" android:text="智慧服务" /> <RadioButton android:id="@+id/rb_gov" style="@style/BottomTabStyle" android:drawableTop="@drawable/btn_tab_gov_selector" android:text="政务" /> <RadioButton android:id="@+id/rb_setting" style="@style/BottomTabStyle" android:drawableTop="@drawable/btn_tab_setting_selector" android:text="设置" /> </RadioGroup></LinearLayout>
base_pager.xml ViewPager部分的布局的基类
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/title_red_bg" > <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:textColor="#ffffff" android:textSize="22sp" android:text="智慧城市" /><ImageButton android:id="@+id/btn_menu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:layout_centerVertical="true" android:layout_marginLeft="5dp" android:src="@drawable/img_menu" /> </RelativeLayout> <FrameLayout android:id="@+id/fl_content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" ></FrameLayout> </LinearLayout>BasePager.java基类的逻辑文件,后面的子页面都继承这个
package com.ldw.news.base;import android.app.Activity;import android.view.View;import android.view.View.OnClickListener;import android.widget.FrameLayout;import android.widget.ImageButton;import android.widget.TextView;import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;import com.ldw.news.MainActivity;import com.ldw.news.R;/** * 主页下5个子页面的基类 * * @author Kevin * */public class BasePager {public Activity mActivity;public View mRootView;// 布局对象public TextView tvTitle;// 标题对象public FrameLayout flContent;// 内容public ImageButton btnMenu;// 菜单按钮public BasePager(Activity activity) {mActivity = activity;initViews();}/** * 初始化布局 */public void initViews() {mRootView = View.inflate(mActivity, R.layout.base_pager, null);tvTitle = (TextView) mRootView.findViewById(R.id.tv_title);flContent = (FrameLayout) mRootView.findViewById(R.id.fl_content);btnMenu = (ImageButton) mRootView.findViewById(R.id.btn_menu);btnMenu.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {toggleSlidingMenu();}});}/* * 切换SlidingMenu的状态 */protected void toggleSlidingMenu() {MainActivity mainUi = (MainActivity) mActivity;SlidingMenu slidingMenu = mainUi.getSlidingMenu();slidingMenu.toggle();// 切换状态, 显示时隐藏, 隐藏时显示}/** * 初始化数据 */public void initData() {}/** * 设置侧边栏开启或关闭,左侧边栏在MainActivity中 * MainActivity中有SlidingMenu */public void setSlidingMenuEnable(boolean enable) {//获取到MainActivity,这样可以操作slidingMenuMainActivity mainUi = (MainActivity) mActivity;//获取到slidingMenu对象SlidingMenu slidingMenu = mainUi.getSlidingMenu();//设置slidingMenu是否可以点击if (enable) {slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);} else {slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);}}}
Home子页面
package com.ldw.news.base.impl;import android.app.Activity;import android.graphics.Color;import android.view.Gravity;import android.view.View;import android.widget.TextView;import com.ldw.news.base.BasePager;/* * home继承基类 */public class HomePager extends BasePager {public HomePager(Activity activity) {super(activity);}@Overridepublic void initData() {System.out.println("初始化首页数据....");// 修改标题tvTitle.setText("智慧城市");// 隐藏菜单按钮btnMenu.setVisibility(View.GONE);setSlidingMenuEnable(false);//关闭侧边栏,不显示左侧TextView text = new TextView(mActivity);text.setText("首页");text.setTextColor(Color.RED);text.setTextSize(25);text.setGravity(Gravity.CENTER);// 向FrameLayout中动态添加布局flContent.addView(text);}}
ContentFrame.java主页面布局的逻辑文件,创建了ViewPager,然后初始化了ViewPager,同时监听并初始化每一个ViePager的数据,让HomePager等填充了内容
package com.ldw.news.fragment;import java.util.ArrayList;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.ViewGroup;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;import com.ldw.news.R;import com.ldw.news.base.BasePager;import com.ldw.news.base.impl.GovAffairsPager;import com.ldw.news.base.impl.HomePager;import com.ldw.news.base.impl.NewsCenterPager;import com.ldw.news.base.impl.SettingPager;import com.ldw.news.base.impl.SmartServicePager;import com.lidroid.xutils.ViewUtils;import com.lidroid.xutils.view.annotation.ViewInject;/* * 主界面 */public class ContentFragment extends BaseFragment{@ViewInject(R.id.rg_group)private RadioGroup rg_group;@ViewInject(R.id.vp_content)private ViewPager mViewPager;private ArrayList<BasePager> mPagerList;//初始化布局@Overridepublic View initViews() {View view = View.inflate(mActivity, R.layout.fragment_content, null);//获取的id注入viewViewUtils.inject(this, view);return view;}//初始化数据@Overridepublic void initData(){//默认勾选homerg_group.check(R.id.rb_home);mPagerList = new ArrayList<BasePager>();//初始化5个页面/*for(int i = 0; i < 5; i++){BasePager pager = new BasePager(mActivity);mPagerList.add(pager);}*/mPagerList.add(new HomePager(mActivity));mPagerList.add(new NewsCenterPager(mActivity));mPagerList.add(new SmartServicePager(mActivity));mPagerList.add(new GovAffairsPager(mActivity));mPagerList.add(new SettingPager(mActivity));mViewPager.setAdapter(new ContentAdapter());//监听rg_group的点击事件切换屏幕rg_group.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {// 根据checkedId来判断显示哪一个switch(checkedId){case R.id.rb_home:// mViewPager.setCurrentItem(0);// 设置当前页面mViewPager.setCurrentItem(0, false);// false参数的作用是去掉切换页面的动画break;case R.id.rb_news:mViewPager.setCurrentItem(1, false);// 设置当前页面break;case R.id.rb_smart:mViewPager.setCurrentItem(2, false);// 设置当前页面break;case R.id.rb_gov:mViewPager.setCurrentItem(3, false);// 设置当前页面break;case R.id.rb_setting:mViewPager.setCurrentItem(4, false);// 设置当前页面break;default:break;}}});//监听mViewPager对象,来切换动画,当前的ViewPager被选中以后,就初始化该页面的数据mViewPager.setOnPageChangeListener(new OnPageChangeListener(){@Overridepublic void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {// TODO Auto-generated method stub}@Overridepublic void onPageSelected(int position) {// 获取当前被选中的页面, 初始化该页面数据mPagerList.get(position).initData();}@Overridepublic void onPageScrollStateChanged(int state) {// TODO Auto-generated method stub}});// 初始化首页数据,因为页面点击的时候才会初始化数据,因此刚进入的时候,第一页没有初始化,需要手动初始化数据mPagerList.get(0).initData();}class ContentAdapter extends PagerAdapter{@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mPagerList.size();}@Overridepublic boolean isViewFromObject(View view, Object object) {// TODO Auto-generated method stubreturn view == object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {//获取到某个位置的pagerBasePager pager = mPagerList.get(position);//填充布局对象container.addView(pager.mRootView);// 初始化数据.... 不要放在此处初始化数据, 否则会预加载下一个页面//pager.initData();return pager.mRootView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}}}
0 0
- 159.n1-点击RadioGroup切换ViewPager
- ViewPager+Fragment+RadioGroup实现页面联动\点击切换
- 滑动或点击按钮切换页面 ViewPager+RadioGroup+Fragment
- 点击RadioGroup切换Fragment
- 点击RadioGroup切换图片
- RadioGroup 点击切换背景图片
- Android 使用ViewPager和RadioGroup配合Fragment实现标签页,可点击按钮切换、滑动切换。
- RadioGroup+ViewPager组合切换监听
- ViewPager+RadioGroup实现标题栏切换,Fragment切换
- RadioGroup点击RadioButtion切换Fragment
- Fragment+RadioGroup点击切换Fragment
- ViewPager和RadioGroup实现页面切换效果
- ViewPager与RadioGroup实现导航切换
- RadioGroup 和 ViewPager 绑定 实现切换
- 抽屉布局加上RadioGroup+点击进行切换
- FrameLayout加RadioGroup实现底部点击切换
- RadioGroup中点击切换RadioButton背景
- ViewPager+RadioGroup
- java替换html中的样式
- 计算分数的精确值
- git clone 远程分支
- linux多线程-懒人笔记(一)
- git push & git pull 推送/拉取分支
- 159.n1-点击RadioGroup切换ViewPager
- Python 标准库 csv —— csv 文件的读写
- linux下安装或升级GCC4.8,以支持C++11标准
- Android中 dp,px,dpi三者之间的关系
- transition&transform
- MQTT服务器APOLLO搭建测试以及花生壳映射
- python操作mongodb
- 矩阵求导与实例
- 平衡查找树之B树