Fragment+ViewPager

ViewPager实现
引入:
ViewPager可以通过layout
 
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:background="#ffffff" 
    android:flipInterval="30" 
    android:persistentDrawingCache="animation" 
    android:layout_centerInParent="true" 
     > 
</android.support.v4.view.ViewPager> 
适配器:
因为ViewPager中存放的是一系列的Fragment,所以需要一个Fragment的适配器,该适配器中保存了对首页各个Fragment的列表的引用。
 
public class MainFragmentPagerAdapter extends FragmentPagerAdapter { 
private ArrayList<Fragment> fragments; 
public MainFragmentPagerAdapter(FragmentManager fm) { 
super(fm); 
// TODO Auto-generated constructor stub 

public MainFragmentPagerAdapter(FragmentManager fm,ArrayList<Fragment> fragments){ 
super(fm); 
this.fragments = fragments; 

/* (non-Javadoc) 
 * @see android.support.v4.app.FragmentPagerAdapter#getItem(int) 
 */ 
@Override 
public Fragment getItem(int arg0) { 
return fragments.get(arg0); 

/* (non-Javadoc) 
 * @see android.support.v4.view.PagerAdapter#getCount() 
 */ 
@Override 
public int getCount() { 
return fragments.size(); 

@Override 
public int getItemPosition(Object object) { 
// TODO Auto-generated method stub 
return super.getItemPosition(object); 


事件:
这里主要处理两个事件,1.OnPageChange事件;2.OnTouch事件
这两个事件的任务是:
1.OnPageChange事件,当页面发生切换时,通知底部工具栏改变焦点,以实现底部工具栏和页面之间同步。
2.OnTouch事件,该事件用于分发touch事件,解决与“主页”中的Gallery横屏时事件冲突的问题。
 
viewPager.setOnPageChangeListener(pageChangeListener); 
viewPager.setOnTouchListener(touchListener); 
pageChangeListener定义如下: 
private OnPageChangeListener pageChangeListener = new OnPageChangeListener() { 
@Override 
public void onPageSelected(int arg0) { 
setIconSelected(arg0); 

@Override 
public void onPageScrolled(int arg0, float arg1, int arg2) { 

@Override 
public void onPageScrollStateChanged(int arg0) { 

}; 
touchListener定义如下:
 
private OnTouchListener touchListener = new OnTouchListener(){ 
@Override 
public boolean onTouch(View v, MotionEvent event) { 
if (currentIndex != 0) { 
return false; 

int[] location = new int[2]; 
homeFragment.gallery.getLocationOnScreen(location); 
if (location[0] != 0) { 
return false; 

if (event.getRawY() > location[1] 
&& event.getRawY() - location[1] < homeFragment.gallery 
.getHeight()) { 
return homeFragment.gallery.dispatchTouchEvent(event); 

return false; 

}; 
Fragment实现
Fragment的实现方式和Activity的实现方式基本相同,所需要注意的是要重写onCreateView方法。主要的内容是将Activity的onCreate方法中的内容写到Fragment的onCrateView方法中。例如SettingActivity中的onCrate方法如下:
 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.setting); 
getView(); 
setListener(); 

对应的Fragment中的onCrateView方法为:
 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) { 
Utils.log("onCreateView"); 
View v = inflater.inflate(R.layout.setting, container, false); 
getViews(v); 
setListener(); 
return v; 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值