新闻中心NewsCenterPager.java

package com.itheima.zhbj52.base.impl;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
import com.google.gson.Gson;
import com.itheima.zhbj52.MainActivity;
import com.itheima.zhbj52.R;
import com.itheima.zhbj52.base.BaseMenuDetailPager;
import com.itheima.zhbj52.base.BasePager;
import com.itheima.zhbj52.base.menudetail.InteractMenuDetailPager;
import com.itheima.zhbj52.base.menudetail.NewsMenuDetailPager;
import com.itheima.zhbj52.base.menudetail.PhotoMenuDetailPager;
import com.itheima.zhbj52.base.menudetail.TopicMenuDetailPager;
import com.itheima.zhbj52.domain.NewsData;
import com.itheima.zhbj52.domain.NewsData.NewsMenuData;
import com.itheima.zhbj52.fragment.LeftMenuFragment;
import com.itheima.zhbj52.global.GlobalContants;
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;/*** 新闻中心(前面可知,5个RadioButton所控制的ViewPager的xml类是NewsCenterPager的属性mRootView,* 这个类是用来给ViewPager的xml来填充xml数据的)*/
public class NewsCenterPager extends BasePager {/*从BasePager继承的属性:(这个类的作用就是修改tvTitle,flContent,btnMenu的值)public View mRootView = View.inflate(mActivity, R.layout.base_pager, null);//这个mRootView是5个RadioButton所控制的ViewPager的xml类。public TextView tvTitle = (TextView) mRootView.findViewById(R.id.tv_title);// 标题对象public FrameLayout flContent = (FrameLayout) mRootView.findViewById(R.id.fl_content);// 下面的空布局 public ImageButton btnMenu = (ImageButton) mRootView.findViewById(R.id.btn_menu);// 三条红色的横线*/private ArrayList<BaseMenuDetailPager> mPagers;// 4个菜单详情页的集合private NewsData mNewsData;public NewsCenterPager(Activity activity) {super(activity);}@Overridepublic void initData() {System.out.println("初始化新闻中心数据....");tvTitle.setText("新闻");setSlidingMenuEnable(true);// 打开侧边栏可以滑动出来。
        getDataFromServer();}/*** 从服务器获取数据*/private void getDataFromServer() {HttpUtils utils = new HttpUtils();// 使用xutils发送请求
        utils.send(HttpMethod.GET, GlobalContants.CATEGORIES_URL,new RequestCallBack<String>() {//这里返回的是json字符串所以传String,如果是下载文件就要传File,// 访问成功
                    @Overridepublic void onSuccess(ResponseInfo 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();}});}/*** 解析网络数据## Json ##{"name":"zhangsan", "age":18, "books":[ {"name":"wwww","price":10},  {"name":"wwww","price":20} ]}## Gson ##google + json谷歌提供的开源的解析json的框架Gson gson = new Gson();NewsData data = gson.fromJson(result, NewsData.class);*/protected void parseData(String result) {Gson gson = new Gson();mNewsData = gson.fromJson(result, NewsData.class);//Gson将json解析成NewsData对象,Gson也可以将对象转成json,System.out.println("解析结果:" + mNewsData);// 刷新测边栏的数据(新闻中心RadioButton的侧边栏“新闻,专题,组图,互动”),侧边栏是根据主页面的不同而不同的。MainActivity mainUi = (MainActivity) mActivity;//MainActivityLeftMenuFragment leftMenuFragment = mainUi.getLeftMenuFragment();//getLeftMenuFragment()是MainActivity的方法,
        leftMenuFragment.setMenuData(mNewsData);// 准备4个菜单详情页(下面其中之一"新闻中心"RadioButton点进去后的左侧栏的"新闻,专题,组图,互动页面"的右侧详情页面。)mPagers = new ArrayList<BaseMenuDetailPager>();mPagers.add(new NewsMenuDetailPager(mActivity, mNewsData.data.get(0).children));//新闻中心-新闻mPagers.add(new TopicMenuDetailPager(mActivity));//新闻中心-专题mPagers.add(new PhotoMenuDetailPager(mActivity));//新闻中心-组图/*  BaseMenuDetailPager.javapublic abstract class BaseMenuDetailPager {public Activity mActivity;public View mRootView;// 根布局对象public BaseMenuDetailPager(Activity activity) {mActivity = activity;mRootView = initViews();}public abstract View initViews();public void initData() {}}PhotoMenuDetailPager.javapublic class PhotoMenuDetailPager extends BaseMenuDetailPager {public PhotoMenuDetailPager(Activity activity) {super(activity);}@Overridepublic View initViews() {TextView text = new TextView(mActivity);text.setText("菜单详情页-组图");text.setTextColor(Color.RED);text.setTextSize(25);text.setGravity(Gravity.CENTER);return text;}}*/mPagers.add(new InteractMenuDetailPager(mActivity));//新闻中心-互动
setCurrentMenuDetailPager(0);// 设置菜单详情页-新闻为默认当前页
    }/*** 设置当前菜单详情页(修改5个RadioButton对应的ViewPager的xml数据)*/public void setCurrentMenuDetailPager(int position) {BaseMenuDetailPager pager = mPagers.get(position);// 获取当前要显示的菜单详情页flContent.removeAllViews();// 清除之前的布局,flContent是BasePager的FrameLayout flContent属性,也是ViewPager的其中之一xml的FrameLayout(ViewPager的xml布局不一定要一样)。flContent.addView(pager.mRootView);// 将菜单详情页的布局设置给帧布局,返回的是包含ViewPager控件的xml对应的View对象。View mRootView=View.inflate(mActivity, R.layout.news_menu_detail, null),news_menu_detail.xml是一个包含ViewPager的xml。或者仅仅返回一个View对象就可以。flContent是一个FrameLayout,里面加载的xml是新闻中心类的一个View属性,对该View属性的控制是在该类中完成的。// 设置当前页的标题NewsMenuData menuData = mNewsData.data.get(position);tvTitle.setText(menuData.title);pager.initData();// 初始化当前页面的数据
    }}

网络数据类NewsData.java

package com.itheima.zhbj52.domain;import java.util.ArrayList;/*** 网络分类信息的封装*/
public class NewsData {//gson解析的时候retcode,data字段名字必须和服务器返回的json字段名一致,public int retcode;public ArrayList<NewsMenuData> data;// 侧边栏数据对象public class NewsMenuData {//gson解析的时候id,title,type,url字段名字必须和服务器返回的字段名一致,public String id;public String title;public int type;public String url;public ArrayList<NewsTabData> children;@Overridepublic String toString() {return "NewsMenuData [title=" + title + ", children=" + children+ "]";}}// 新闻页面下11个子页签的数据对象public class NewsTabData {//gson解析的时候id,title,type,url字段名字必须和服务器返回的json字段名一致,public String id;public String title;public int type;public String url;@Overridepublic String toString() {return "NewsTabData [title=" + title + "]";}}@Overridepublic String toString() {return "NewsData [data=" + data + "]";}
}

侧边栏(新闻中心RadioButton的侧边栏“新闻,专题,组图,互动”)  LeftMenuFragment.java

package com.itheima.zhbj52.fragment;import java.util.ArrayList;import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;import com.itheima.zhbj52.MainActivity;
import com.itheima.zhbj52.R;
import com.itheima.zhbj52.base.impl.NewsCenterPager;
import com.itheima.zhbj52.domain.NewsData;
import com.itheima.zhbj52.domain.NewsData.NewsMenuData;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;/*** 侧边栏(新闻中心RadioButton的侧边栏“新闻,专题,组图,互动”)*/
public class LeftMenuFragment extends BaseFragment {@ViewInject(R.id.lv_list)private ListView lvList;private ArrayList<NewsMenuData> mMenuList;private int mCurrentPos;// 当前被点击的菜单项private MenuAdapter mAdapter;@Overridepublic View initViews() {View view = View.inflate(mActivity, R.layout.fragment_left_menu, null);//fragment_left_menu.xml/*<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#000" >侧边栏是一个List<ListViewandroid:id="@+id/lv_list"android:layout_width="match_parent"android:layout_height="wrap_content"android:listSelector="@android:color/transparent"android:divider="@android:color/transparent"     listView的分割线为透明android:layout_marginTop="40dp" /></RelativeLayout>*/ViewUtils.inject(this, view);//写这一句就支持注解了。return view;}@Overridepublic void initData() {//BaseFragment里面调用lvList.setOnItemClickListener(new OnItemClickListener() {//ItemClick事件里面可以获取当前点击哪一个。
            @Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {mCurrentPos = position;mAdapter.notifyDataSetChanged();//调用Adapter的getView()方法,这时getView()方法执行的次数为listView的个数,从而设置是否显示红色和白色。//getView()方法不仅仅是在初始化和滑动的时候调用,在其他需要的地方也可以调用。
setCurrentMenuDetailPager(position);toggleSlidingMenu();// 隐藏
            }});}/*** 切换SlidingMenu的状态,侧边栏隐藏和显示。*/protected void toggleSlidingMenu() {MainActivity mainUi = (MainActivity) mActivity;SlidingMenu slidingMenu = mainUi.getSlidingMenu();slidingMenu.toggle();// 切换状态, 显示时隐藏, 隐藏时显示
    }/*** 设置当前菜单详情页,onItemClick触发。*/protected void setCurrentMenuDetailPager(int position) {MainActivity mainUi = (MainActivity) mActivity;ContentFragment fragment = mainUi.getContentFragment();// 获取主页面fragmentNewsCenterPager pager = fragment.getNewsCenterPager();// 获取新闻中心页面pager.setCurrentMenuDetailPager(position);// 设置当前菜单详情页,新闻中心左边侧边栏点击后右边主页面显示不同的分类。
    }// 设置网络数据public void setMenuData(NewsData data) {// System.out.println("侧边栏拿到数据啦:" + data);mMenuList = data.data;mAdapter = new MenuAdapter();lvList.setAdapter(mAdapter);}/*** 侧边栏数据适配器*/class MenuAdapter extends BaseAdapter {@Overridepublic int getCount() {return mMenuList.size();}@Overridepublic NewsMenuData getItem(int position) {return mMenuList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = View.inflate(mActivity, R.layout.list_menu_item, null);//list_menu_item.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="wrap_content"android:orientation="vertical"android:padding="10dp" ><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:drawableLeft="@drawable/btn_menu_selector"   新闻左边的小三角形图片选择器android:drawablePadding="5dp"android:enabled="false"    默认不可使用,android:text="新闻"android:textColor="@drawable/text_menu_selector"   文字的颜色选择器android:textSize="25sp" /></LinearLayout>btn_menu_selector选择器:<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_enabled="true" android:drawable="@drawable/menu_arr_select"/>   可以使用就是红色,<item android:drawable="@drawable/menu_arr_normal"/>    不可以使用就是白色,</selector>*/TextView tvTitle = (TextView) view.findViewById(R.id.tv_title);NewsMenuData newsMenuData = getItem(position);tvTitle.setText(newsMenuData.title);if (mCurrentPos == position) {// 判断当前绘制的view是否被选中// 显示红色tvTitle.setEnabled(true);//可以使用,然后根据颜色选择器判断显示的颜色。} else {// 显示白色tvTitle.setEnabled(false);}return view;}}
}

侧边栏“新闻”  NewsMenuDetailPager.java

package com.itheima.zhbj52.base.menudetail;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 android.widget.TextView;import com.itheima.zhbj52.R;
import com.itheima.zhbj52.base.BaseMenuDetailPager;
import com.itheima.zhbj52.base.TabDetailPager;
import com.itheima.zhbj52.domain.NewsData.NewsTabData;/*** 菜单详情页-新闻*/
public class NewsMenuDetailPager extends BaseMenuDetailPager {//BaseMenuDetailPager.java/*public abstract class BaseMenuDetailPager {public Activity mActivity;public View mRootView;// 根布局对象public BaseMenuDetailPager(Activity activity) {mActivity = activity;mRootView = initViews();}public abstract View initViews();public void initData() {}}*//*继承的属性:public View mRootView = initViews();*/private ViewPager mViewPager;private ArrayList<TabDetailPager> mPagerList;private ArrayList<NewsTabData> mNewsTabData;// 页签网络数据,北京,中国,国际,体育等11个页面public NewsMenuDetailPager(Activity activity,ArrayList<NewsTabData> children) {super(activity);mNewsTabData = children;}@Overridepublic View initViews() {View view = View.inflate(mActivity, R.layout.news_menu_detail, null);//news_menu_detail.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.ViewPagerandroid:id="@+id/vp_menu_detail"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>*/mViewPager = (ViewPager) view.findViewById(R.id.vp_menu_detail);//修改view这个xml对象的属性return view;}@Overridepublic void initData() {mPagerList = new ArrayList<TabDetailPager>();// 初始化页签数据(11个TabDetailPager是 北京,中国,国际,体育等页面)for (int i = 0; i < mNewsTabData.size(); i++) {TabDetailPager pager = new TabDetailPager(mActivity, mNewsTabData.get(i));mPagerList.add(pager);}mViewPager.setAdapter(new MenuDetailAdapter());}class MenuDetailAdapter extends PagerAdapter {@Overridepublic int getCount() {return mPagerList.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {TabDetailPager pager = mPagerList.get(position);//页签数据11个TabDetailPagercontainer.addView(pager.mRootView);//mRootView=new TextView(mActivity),这里返回一个XMl的View对象。
            pager.initData();//这里对XML的View对象进行数据的加载。return pager.mRootView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}}}

页签详情页 TabDetailPager.java

package com.itheima.zhbj52.base;import com.itheima.zhbj52.domain.NewsData.NewsTabData;import android.app.Activity;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;/*** 页签详情页*/
public class TabDetailPager extends BaseMenuDetailPager {/*public abstract class BaseMenuDetailPager {public Activity mActivity;public View mRootView;// 根布局对象,返回给上层ViewPager的xml的View对象。public BaseMenuDetailPager(Activity activity) {mActivity = activity;mRootView = initViews();}public abstract View initViews();public void initData() {}}*/NewsTabData mTabData;private TextView tvText;public TabDetailPager(Activity activity, NewsTabData newsTabData) {super(activity);mTabData = newsTabData;}@Overridepublic View initViews() {tvText = new TextView(mActivity);tvText.setText("页签详情页");tvText.setTextColor(Color.RED);tvText.setTextSize(25);tvText.setGravity(Gravity.CENTER);return tvText;//返回给上层的XML的View对象}@Overridepublic void initData() {//对返回给上层的XML的VIew对象的数据的加载tvText.setText(mTabData.title);}}

转载于:https://www.cnblogs.com/yaowen/p/5042683.html

android122 zhihuibeijing 新闻中心NewsCenterPager加载网络数据实现相关推荐

  1. 加载网络数据失败的原因:

    加载网络数据失败的原因 第一:网络权限未设置 Manifests里写入 <!--网络请求权限--><uses-permission android:name="androi ...

  2. Android之ListViewJson加载网络数据

    使用到的主要内容: 1.Json 解析网络数据 2.异步任务加载图片和数据 3.ListView 的内存空间优化(ConvertView)和运行时间优化(ViewHolder) 4.ListView ...

  3. easyui datagrid加载本地数据和网络数据

    1.加载本地数据 var obj = {"total":2,"rows":[{id:"1",name:"一"},{id: ...

  4. 使用CEfSharp之旅(1) 加载网络页面

    使用CEfSharp之旅(1) 加载网络页面 原文:使用CEfSharp之旅(1) 加载网络页面 版权声明:本文为博主原创文章,未经博主允许不得转载.可点击关注博主 ,不明白的进群191065815 ...

  5. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  6. android webView加载网络视频

    之前,我写过webView加载本地网页的博客,今天,就写写webView加载网络视频的内容. 一.加载网页 1.WebView用来显示网页,使用必须时刻注意我们需要添加网络权限 <uses-pe ...

  7. 使用异步任务加载网络上的图片

    我们知道,如果要加载一个很耗时的操作,会阻塞主线程,这时我们可以想到开启一个新的线程,避免阻塞,在android中也有这样的问题,我们可以用异步任务来操作,异步任务也是开启一个线程,线程里面发一个消息 ...

  8. android加载网页pdf,android 一行代码搞定加载网络 pdf 文件

    之前写过一篇Android打开本地pdf文件的文章,最后总结的时候说,后面一定要拓展库,让其也能打开网络的的pdf文件.今天终于可以兑现承诺了.frok一份代码github.com/JoanZapat ...

  9. android 获取网络视频资源,Android 加载网络视频(url地址)第三方框架简用

    正好最近做项目有个需要加载网络视频技术,就找了找,碰到了这个开源的框架.主要还是网络请求下来的视频地址,然后简单的,赋一下值,非常OK.不过限自己练习用毕竟看需求的嘛,不多介绍复制用吧. 先看看效果大 ...

  10. Android加载网络图片资源

    Android加载网络图片资源 获取图片资源 public static Bitmap getBitmap(String path) throws IOException {URL url = new ...

最新文章

  1. cpu负载过高案例,解决方法记录
  2. linux 死锁分析
  3. C# WinForm开发系列 - GDI+【转】
  4. 风靡全球的GANs:一文看尽这“混世魔王”的“三生三世”
  5. 零基础(转行,应届生、在校生)前端开发学习计划
  6. 考研失利,找工作感悟
  7. word中如何将所有同一级标题统一格式
  8. 【工作感悟】职场工作感悟(一)
  9. dn什么意思_钢管中的DN表示什么意思?
  10. 2013年第四届c b组省赛蓝桥杯
  11. 正则表达式在线测试通过,java运行通不过
  12. 正确安装破解后,打开Matlab R2018a 报错License Manager Error-8
  13. Android--CoordinatorLayout源码分析及NestedScrolling机制
  14. 四步完成离线部署wvs
  15. DeepMind再爆性骚扰丑闻!内部邮件泄露,色狼自夸猛男
  16. 列表的增删改查,嵌套等,及元组的查
  17. mysql+系统数据库+修复_如何进行mysql表的修复工作?
  18. ASA广告投放之关键词的选择
  19. yxy小蒟蒻的201112总结
  20. java1.8之supplier理解

热门文章

  1. 小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_8、SpringBoot基础HTTP接口GET请求实战...
  2. Linux 线程调度与优先级
  3. 用简单直白的方式讲解A星寻路算法原理
  4. IOS学习之斯坦福大学IOS开发课程笔记(第六课)
  5. 系统启动 之 Linux系统启动概述(1)
  6. Linux下启动Oracle数据库
  7. mysql常用命令添加外键主键约束存储过程索引
  8. vue-quasar-admin 一个包含通用权限控制的后台管理系统
  9. 【2030】排队打水问题
  10. P1279 字串距离