主页面内部ViewPager滑动效果

在主页面新闻页签中,当选中新闻选项时,可以向左滑动N个页面。

主页面内部ViewPager滑动效果_第1张图片 主页面内部ViewPager滑动效果_第2张图片

中国和国际两个页签是滑动效果进行切换的,是在Fragment中添加了一个ViewPager布局,并用了N个ViewPager进行填充切换。


这里是主页面的布局中Fragment的xml文件:

<FrameLayout 
        android:id="@+id/fl_content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"  
        >
    </FrameLayout>

在NewsCenterPager(新闻内容更新类)中获得他的id(fl_content)之后,使用

flcontent.addView(pager.mRootView);//将菜单详情页添加到Fragment中
flcontent是findViewByid拿到的。

pager.mRootVIew是对应的ViewPager返回的View对象。


下面是对这个需要返回的ViewPager对象的设置,实现了返回的ViewPager对象,也就实现了滑动切换新子页签的功能。

第一步:声明一个TabDetailPager用于填充每一个页面的内容。

public class TabDetailPager extends BaseMenuDetailPager {

	public NewsTabData mTabData;
	private TextView text;
	public TabDetailPager(Activity mActivity, NewsTabData newsTabData) {
		super(mActivity);
		this.mTabData=newsTabData;
	}

	@Override
	public View initView() {
		text=new TextView(mActivity);
		//text.setText(Title);
		text.setTextColor(Color.RED);
		text.setTextSize(25);
		text.setGravity(Gravity.CENTER);
		return text;
	}
	@Override
	public void initData() {
		text.setText(mTabData.title);
	}

}


第二步:在新闻页签中添加对应的ViewPager:

对于ViewPager的更新时通过对控件mViewPager切换来实现的

import java.util.ArrayList;

import com.example.zhihuibj.R;
import com.example.zhihuibj.BaseMenuDetailPager.MenuDetail.TabDetailPager;
import com.example.zhihuibj.domain.NewsData.NewsTabData;

import android.app.Activity;
import android.graphics.Color;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/*
 * 菜单详情页-新闻
 */
public class NewsMenuDetailPager extends BaseMenuDetailPager{

	private ViewPager mViewPager;
	private ArrayList<TabDetailPager> mpagerlist;
	private ArrayList<NewsTabData> mNewsTabData;//页签网络数据
	
	public NewsMenuDetailPager(Activity mActivity, ArrayList<NewsTabData> children) {
		super(mActivity);
		mNewsTabData=children;//从网络获取的数据直接通过狗仔函数传进来mNewsTabData
	}

	@Override
	public View initView() {
		View view=View.inflate(mActivity, R.layout.news_menu_detail, null);//将ViewPager实例化成对象
		mViewPager=(ViewPager) view.findViewById(R.id.vp_menu_detail);//获得ViewPager控件,对于ViewPager的更新时通过对控件切换来实现的
		return view;
	}
	
	@Override
	public void initData() {
		//初始化页签
		mpagerlist = new ArrayList<TabDetailPager>();
		
		for(int i=0;i<mNewsTabData.size();i++) //根据网络数据的多少,添加N个ViewPager
		{
			TabDetailPager pager=new TabDetailPager(mActivity,mNewsTabData.get(i));
			mpagerlist.add(pager);
			//System.out.println(i+"!!!!");
		}
		mViewPager.setAdapter(new MenuDetailApapter());
		//System.out.println("子类!!!");
	}
	
	class MenuDetailApapter extends PagerAdapter{

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

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO Auto-generated method stub
			return arg0==arg1;
		}
		
		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			
			TabDetailPager pager = mpagerlist.get(position);
			pager.initData();//初始化数据 实际是初始化TabDetailPager中的数据
			container.addView(pager.mRootView); //给容器中添加View对象
			
			return pager.mRootView;  // 用于destroyItem的对象
		}
		
		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView((View) object);
		}
				
	}

}






你可能感兴趣的:(android,项目)