164.n1-菜单详情页的tab的初始化(网络取数据)

来源:互联网 发布:vps建站 编辑:程序博客网 时间:2024/06/14 03:51

详情页的tab是由ViewPager来实现切换的

布局news_menu_details.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" >        <android.support.v4.view.ViewPager        android:id="@+id/vp_menu_detail"        android:layout_width="match_parent"    android:layout_height="match_parent"        /></LinearLayout>

NewsMenuDetailPager.java逻辑页面

package com.ldw.news.base.menudetails;import java.util.ArrayList;import android.app.Activity;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.ViewGroup;import com.ldw.news.R;import com.ldw.news.base.BaseMenuDetailPager;import com.ldw.news.base.TabDetailPager;import com.ldw.news.domain.NewsData.NewsTabData;/* * 菜单详情页-新闻*/ public class NewsMenuDetailPager extends BaseMenuDetailPager {private ViewPager vp_menu_detail;private ArrayList<TabDetailPager> mPagerList;private ArrayList<NewsTabData> mNewsTabData;//页签的网络数据public NewsMenuDetailPager(Activity activity, ArrayList<NewsTabData> children) {super(activity);//接受传过来的children数据,有11个mNewsTabData = children;}@Overridepublic View initView() {View view = View.inflate(mActivity, R.layout.news_menu_details, null);vp_menu_detail = (ViewPager) view.findViewById(R.id.vp_menu_detail);return view;}@Overridepublic void initData(){//数据是通过从服务器中获取大数据来初始化mPagerList = new ArrayList<TabDetailPager>();for(int i = 0; i < mNewsTabData.size(); i++){TabDetailPager tabDetailPager = new TabDetailPager(mActivity, mNewsTabData.get(i));//添加到链表mPagerList.add(tabDetailPager);}vp_menu_detail.setAdapter(new MenuDetailAdapter());}class MenuDetailAdapter 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) {//初始化页面TabDetailPager tabDetailPager = new TabDetailPager(mActivity, mNewsTabData.get(position));//添加viewcontainer.addView(tabDetailPager.mRebootView);//初始化数据tabDetailPager.initData();//显示界面return tabDetailPager.mRebootView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}}}

BaseMenuDetailPager.java是NewsMenuDetailPager的基类

package com.ldw.news.base;import android.app.Activity;import android.view.View;/* * 点击左侧菜单的时候,右侧显示的详细内容 */public abstract class BaseMenuDetailPager {public Activity mActivity;public View mRebootView;//根局部public BaseMenuDetailPager(Activity activity){mActivity = activity;mRebootView = initView();}/* * 初始化界面,设置成虚函数,必须实现 */public abstract View initView();/* * 初始化数据 */public void initData(){}}

NewsCenterPager.java解析网络数据并往详情页传递数据

package com.ldw.news.base.impl;import java.util.ArrayList;import android.app.Activity;import android.graphics.Color;import android.view.Gravity;import android.widget.TextView;import android.widget.Toast;import com.google.gson.Gson;import com.ldw.news.MainActivity;import com.ldw.news.base.BaseMenuDetailPager;import com.ldw.news.base.BasePager;import com.ldw.news.base.menudetails.InteractMenuDetailPager;import com.ldw.news.base.menudetails.NewsMenuDetailPager;import com.ldw.news.base.menudetails.PhotoMenuDetailPager;import com.ldw.news.base.menudetails.TopicMenuDetailPager;import com.ldw.news.domain.NewsData;import com.ldw.news.domain.NewsData.NewsMenuData;import com.ldw.news.fragment.LeftMenuFragment;import com.ldw.news.global.ClobalContants;import com.lidroid.xutils.HttpUtils;import com.lidroid.xutils.exception.HttpException;import com.lidroid.xutils.http.ResponseInfo;import com.lidroid.xutils.http.callback.RequestCallBack;import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;/** * 新闻中心 *  * @author Kevin *  */public class NewsCenterPager extends BasePager {// 4个菜单详情页的集合,填充左侧菜单栏对应的ViewPager中的详情private ArrayList<BaseMenuDetailPager> mPagers;private NewsData mNewsData;public NewsCenterPager(Activity activity) {super(activity);}@Overridepublic void initData() {System.out.println("初始化设置数据....");tvTitle.setText("news");//btnMenu.setVisibility(View.GONE);// 隐藏菜单按钮setSlidingMenuEnable(true);// 关闭侧边栏/*TextView text = new TextView(mActivity);text.setText("设置");text.setTextColor(Color.RED);text.setTextSize(25);text.setGravity(Gravity.CENTER);// 向FrameLayout中动态添加布局flContent.addView(text);*///从服务器中获取数据getDataFromServer();}/* * 从服务器中获取数据,使用xUtils实现 */private void getDataFromServer(){HttpUtils utils = new HttpUtils();//参数是String获取到的是Stringutils.send(HttpMethod.GET, ClobalContants.CATEGORIES_URL, new RequestCallBack<String>(){@Overridepublic void onSuccess(ResponseInfo<String> responseInfo) {//获取到返回的结果String result = (String) responseInfo.result;System.out.println("返回结果:" + result);parseData(result);}//访问失败@Overridepublic void onFailure(HttpException error, String msg) {Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT).show();//打印错误信息error.printStackTrace();}});}/* * 解析网络数据 */protected void parseData(String result) {//使用Gson解析Gson gson = new Gson();//第一个参数是数据,第二个参数是要转化成什么对象mNewsData = gson.fromJson(result, NewsData.class);System.out.println("解析结果:" + mNewsData);// 刷新测边栏的数据,利用MainActivity获取到左侧边栏的数据MainActivity mainUi = (MainActivity) mActivity;//获取到左侧边栏的对象LeftMenuFragment leftMenuFragment = mainUi.getLeftMenuFragment();//设置网络数据leftMenuFragment.setMenuData(mNewsData);//设置4个菜单详情页,LeftMenuFragment和内容的交互,需要调用这里的方法,来初始化侧边栏对应的内容mPagers = new ArrayList<BaseMenuDetailPager>();//获取到data条目下面,news对于页面的children数据,初始化详情页的构造函数mPagers.add(new NewsMenuDetailPager(mActivity, mNewsData.data.get(0).children));mPagers.add(new TopicMenuDetailPager(mActivity));mPagers.add(new PhotoMenuDetailPager(mActivity));mPagers.add(new InteractMenuDetailPager(mActivity));// 设置菜单详情页-新闻为默认当前页setCurrentMenuDetailPager(0);}//设置当前的菜单详情页,显示哪一个详情页,LeftMenuFragment和内容的交互public void setCurrentMenuDetailPager(int position){//获取到某一个位置的pagerBaseMenuDetailPager pager = mPagers.get(position);// 清除之前的布局,fragment布局的内容会叠加flContent.removeAllViews();//填充内容,mRebootView就是初始化的某一个子页面,设置给frameLayoutflContent.addView(pager.mRebootView);// 设置当前页的标题NewsMenuData menuData = mNewsData.data.get(position);tvTitle.setText(menuData.title);// 初始化当前页面的数据pager.initData();}}

详情页的页签TabDetailPager.java

package com.ldw.news.base;import com.ldw.news.domain.NewsData.NewsTabData;import android.app.Activity;import android.graphics.Color;import android.view.Gravity;import android.view.View;import android.widget.TextView;/* * 左边菜单栏右边详情页,最上面对应的tab,页签 */public class TabDetailPager extends BaseMenuDetailPager {//携带数据详情的数据private NewsTabData mTabData;private TextView text;public TabDetailPager(Activity activity, NewsTabData newsTabData) {super(activity);mTabData = newsTabData;}@Overridepublic View initView() {text = new TextView(mActivity);text.setText("页签详情");text.setTextColor(Color.RED);text.setTextSize(25);text.setGravity(Gravity.CENTER);// 向FrameLayout中动态添加布局return text;}@Overridepublic void initData(){text.setText(mTabData.title);}}


0 0
原创粉丝点击