在主页面新闻页签中,当选中新闻选项时,可以向左滑动N个页面。
中国和国际两个页签是滑动效果进行切换的,是在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);
}
}
}