1、完成其他Tab对应的Controller的初始化
仅仅复制HomeTabControler,稍微修改参数,然后添加到mPagerDatas即可
2、完成内容页面tab的切换的实现
(1)滑动屏幕无切换切换效果,点击按钮才有效果;
定义一个NOScrollViewPager实现这个功能
(2)给ViewPager绑定相应的RadioButton;
mRadioGroup.setOnCheckedChangeListener(this);
(3)设置默认的点击按钮为第一个RadioButton。通过RadioButton的ID,得到Item的ID
mViewPager.setCurrentItem(Item);
mRadioGroup.check(R.id.content_home);
介绍下touch事件传递机制
//分派事件
public boolean dispatchTouchEvent(MotionEvent ev)
//拦截事件
public boolean onInterceptTouchEvent(MotionEvent ev)
//处理事件
public boolean onTouchEvent(MotionEvent event)
这三个方法主要在三种类被调用,那三种类呢?
基类 | 例子类 | 拥有的方法 |
继承Activity(activity类) | MainActivity(因项目而异) | dispatchTouchEvent,onTouchEvent |
继承ViewGroup(View容器) | RelativeLayout,FrameLayout,LinearLayout,AbsoluteLayout,ListView,ScrollView… | dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent |
继承View(View控件) | Button,EditText,TextView,ImageView…. | dispatchTouchEvent,onTouchEvent |
这三个方法的含义是什么呢?
事件 | 含义 |
dispatchTouchEvent | 用来分派事件。 其中调用了onInterceptTouchEvent()和onTouchEvent(),一般不重写该方法 |
onInterceptTouchEvent | 用来拦截事件。 ViewGroup类中的源码实现就是{return false;}表示不拦截该事件, 事件将向下传递(传递给其子View); 若手动重写该方法,使其返回true则表示拦截,事件将终止向下传递, 事件由当前ViewGroup类来处理,就是调用该类的onTouchEvent()方法 |
onTouchEvent | 用来处理事件。 返回true则表示该View能处理该事件,事件将终止向上传递(传递给其父View); 返回false表示不能处理,则把事件传递给其父View的onTouchEvent()方法来处理 |
__________________________NoScrollViewPager.java___________________________package huaxa.it.zhihuidemo; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; /** * @项目名: ZhiHuiDemo * @包名: huaxa.it.zhihuidemo * @类名: NoScrollViewPager * @创建者: 黄夏莲 * @创建时间: 2016年10月9日 ,上午7:54:23 * * @描述: 不可滑动的ViewPager */
public class NoScrollViewPager extends ViewPager { public NoScrollViewPager(Context context, AttributeSet attr) { super(context, attr); } public NoScrollViewPager(Context context) { super(context); // TODO Auto-generated constructor stub } @Override public boolean onTouchEvent(MotionEvent ev) { // 不消费 return false; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { // 不拦截 return false; } }
_______________ContentFragment.java________________________<pre name="code" class="html">package huaxa.it.zhihuidemo.fragment;
import java.util.ArrayList;
import java.util.List;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import huaxa.it.zhihuidemo.BaseFragment;
import huaxa.it.zhihuidemo.MainUI;
import huaxa.it.zhihuidemo.R;
import huaxa.it.zhihuidemo.base.TabController;
import huaxa.it.zhihuidemo.base.tab.SettingTabController;
import huaxa.it.zhihuidemo.base.tab.HomeTabController;
import huaxa.it.zhihuidemo.base.tab.NewsCenterTabController;
import huaxa.it.zhihuidemo.base.tab.GovAffairTabController;
import huaxa.it.zhihuidemo.base.tab.SmartServiceTabController;
import android.R.menu;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.fragment
* @类名: ContentFragment
* @创建者: 黄夏莲
* @创建时间: 2016年10月5日 ,下午11:31:04
*
* @描述: 内容页面
*/
public class ContentFragment extends BaseFragment implements
OnCheckedChangeListener
{
// xUtils的view注解要求必须提供id,以使代码不受影响。
@ViewInject(R.id.content_pager)
private ViewPager mViewPager;
@ViewInject(R.id.content_radiogroup)
private RadioGroup mRadioGroup;
private List<TabController> mPagerDatas;
@Override
protected View initView()
{
// TextView text = new TextView(mActivity);
//
// text.setText("主页面");
// text.setTextSize(25);
// text.setGravity(Gravity.CENTER);
// return text;
View view = View.inflate(mActivity, R.layout.content, null);
// 注入ViewUtils工具
ViewUtils.inject(this, view);// 注入view和事件
// 设置RadioGroup的监听器
mRadioGroup.setOnCheckedChangeListener(this);
// 设置RadioGroup的默认值
mRadioGroup.check(R.id.content_home);
return view;
}
@Override
protected void initData()
{
// 数据初始化
mPagerDatas = new ArrayList<TabController>();
mPagerDatas.add(new HomeTabController(mActivity));
mPagerDatas.add(new NewsCenterTabController(mActivity));
mPagerDatas.add(new SmartServiceTabController(mActivity));
mPagerDatas.add(new GovAffairTabController(mActivity));
mPagerDatas.add(new SettingTabController(mActivity));
// 给ViewPager去加载数据
mViewPager.setAdapter(new ContentPagerAdapter());// adapter --> list<数据类型>
}
class ContentPagerAdapter extends PagerAdapter
{
@Override
public int getCount()
{
if (mPagerDatas != null)
{
return mPagerDatas.size();
}
return 0;
}
@Override
public boolean isViewFromObject(View view, Object object)
{
// TODO Auto-generated method stub
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
TabController controller = mPagerDatas.get(position);// 快捷键ALT+Shift+l补全对象
// 获取根视图
View rootView = controller.getRootView();
container.addView(rootView);
// 设置数据
controller.initData();
return rootView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
container.removeView((View) object);
}
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
int currentItem = -1;
// 判断选中了哪个RadioButton
switch (checkedId)
{
case R.id.content_home:
currentItem = 0;
// 设置菜单不可以滑动,即菜单不可见
setSlidingMenuTouchEvent(false);
break;
case R.id.content_newscenter:
currentItem = 1;
// 设置菜单可以滑动,即菜单可见
setSlidingMenuTouchEvent(true);
break;
case R.id.content_service:
currentItem = 2;
// 设置菜单可以滑动,即菜单可见
setSlidingMenuTouchEvent(true);
break;
case R.id.content_govaffairs:
currentItem = 3;
// 设置菜单可以滑动,即菜单可见
setSlidingMenuTouchEvent(true);
break;
case R.id.content_set:
currentItem = 4;
// 设置菜单不可以滑动,即菜单不可见
setSlidingMenuTouchEvent(false);
break;
default:
break;
}
// 设置ViewPager选中的页面
mViewPager.setCurrentItem(currentItem);
}
}