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
- 164.n1-菜单详情页的tab的初始化(网络取数据)
- 167.n1-详情页的banner图
- 162.n1-左侧边栏数据的初始化
- 涉及详情页的信息爬取
- Tab菜单的实现
- 用Tab页做的底部菜单
- 未涉及详情页的信息爬取
- tab菜单的简单实现
- JQuery Tab菜单的实现
- [Tab选项卡菜单(一)]位于顶部的tab选项卡菜单
- 菜单的初始化
- 编写Java程序,模拟简单的计算器。 定义名为Number的类,其中有两个整型数据成员n1和n2,应声明为私有。 编写构造方法,用于初始化n1和n2,再为该类定义 加(addition)、 减(su
- 177.n1-banner的监听
- 为EasyUI 的Tab 标签添加右键菜单(转)
- ul+li+css风格的TAB菜单
- 纯CSS写的tab菜单
- tab菜单最实用的例子
- jquery实现简单的Tab切换菜单
- ABOUT NETWORK CONVERGENCE
- java文件写入
- java线程
- 2016校招真题-小米Git(找最近双亲)
- springboot入门
- 164.n1-菜单详情页的tab的初始化(网络取数据)
- hdu-2670(dp)
- HDU1009 不明错误
- Neutron总结-iptables基础操作之查看操作
- js引用<select>下拉列表选定的内容
- Scala里面的break
- Android-drawable
- 寻找单向链表中含有环的入口节点
- move_base导航的源码心得