9.indicate、xutils、json
public class TabData {public int retcode;public TabDetail data;//不是数组的话类型就是这个public class TabDetail {public String title;public String more;public ArrayList<TabNewsData> news;public ArrayList<TopNewsData> topnews;@Overridepublic String toString() {return "TabDetail [title=" + title + ", news=" + news+ ", topnews=" + topnews + "]";}}/*** 新闻列表对象*/public class TabNewsData {public String id;public String listimage;public String pubdate;public String title;public String type;public String url;@Overridepublic String toString() {return "TabNewsData [title=" + title + "]";}}/*** 头条新闻*/public class TopNewsData {public String id;public String topimage;public String pubdate;public String title;public String type;public String url;@Overridepublic String toString() {return "TopNewsData [title=" + title + "]";}}@Overridepublic String toString() {return "TabData [data=" + data + "]";}}
- 使用xutils加载网络图片,xutils的configDefaultLoadingImage()方法,设置默认图片 ,还有
BitmapFun 、ImageDownloader也能加载网络图片 - xutils的注解,不需要fandviewbyid了,但是前提是需要注入事件ViewUtils.inject(this, view);
- 可以给listview加个头,那样头也跟着滑动了,头上还能加头,lvList.addHeaderView(headerView);
- indicate的使用
1.list_header_topnews.xml:头条新闻
由于indicate自带的下面的几个点很难看,可以根据自己的需求修改
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"//注意命名空间也需要拷过来android:layout_width="match_parent"android:layout_height="wrap_content" ><com.itheima.zhbj52.view.TopNewsViewPagerandroid:id="@+id/vp_news"android:layout_width="match_parent"android:layout_height="200dp" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:background="#a000"android:padding="3dp" ><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#fff"android:textSize="16sp" /><com.viewpagerindicator.CirclePageIndicator//下面的几个点android:id="@+id/indicator"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:padding="10dip"app:fillColor="#f00"//点选中的颜色app:pageColor="@android:color/darker_gray"//点默认的颜色app:radius="3dp"//大小app:strokeWidth="0dp" />//点外面的黑圆圈</RelativeLayout></RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"><ImageViewandroid:id="@+id/iv_pic"android:layout_width="110dp"android:layout_height="70dp"android:scaleType="fitXY"android:padding="1dp"android:background="@android:color/darker_gray"//padding了一个dp,背景是灰色的,图片外就显示出了一个边框android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:src="@drawable/image_demo" /><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_marginLeft="20dp"android:layout_toRightOf="@+id/iv_pic"android:text="新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题"android:textColor="#000"android:maxLines="2"android:ellipsize="end"android:textSize="20sp" /><TextViewandroid:id="@+id/tv_date"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@id/tv_title"android:text="2015-03-16 16:20"android:layout_alignBottom="@id/iv_pic"android:textColor="@android:color/darker_gray"android:textSize="16sp" /></RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><com.itheima.zhbj52.view.RefreshListViewandroid:id="@+id/lv_list"android:layout_width="match_parent"android:layout_height="0dp"android:cacheColorHint="#fff"android:layout_weight="1" ></com.itheima.zhbj52.view.RefreshListView></LinearLayout>
public class TabDetailPager extends BaseMenuDetailPager implementsOnPageChangeListener {
NewsTabData mTabData;// 新闻页签数据// private TextView tvText;private String mUrl;// 访问页签的网络地址private TabData mTabDetailData;// 页签详情页数据@ViewInject(R.id.vp_news)private ViewPager mViewPager;// 头条新闻的pager@ViewInject(R.id.tv_title)private TextView tvTitle;// 头条新闻的标题private ArrayList<TopNewsData> mTopNewsList;// 头条新闻数据集合@ViewInject(R.id.indicator)private CirclePageIndicator mIndicator;// 头条新闻位置指示器@ViewInject(R.id.lv_list)private RefreshListView lvList;// 新闻列表private ArrayList<TabNewsData> mNewsList; // 新闻数据集合private NewsAdapter mNewsAdapter;// 给list设置的adapterpublic TabDetailPager(Activity activity, NewsTabData newsTabData) {super(activity);mTabData = newsTabData;//new的时候把数据和连接地址也创建了mUrl = GlobalContants.SERVER_URL + mTabData.url;}@Overridepublic View initViews() {View view = View.inflate(mActivity, R.layout.tab_detail_pager, null);//下拉刷新// 加载头布局View headerView = View.inflate(mActivity, R.layout.list_header_topnews,null);ViewUtils.inject(this, view);ViewUtils.inject(this, headerView);// 将头条新闻以头布局的形式加给listviewlvList.addHeaderView(headerView);return view;}@Overridepublic void initData() {getDataFromServer();}private void getDataFromServer() {HttpUtils utils = new HttpUtils();utils.send(HttpMethod.GET, mUrl, 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 = new Gson();mTabDetailData = gson.fromJson(result, TabData.class);System.out.println("页签详情解析:" + mTabDetailData);mTopNewsList = mTabDetailData.data.topnews;mNewsList = mTabDetailData.data.news;if (mTopNewsList != null) {mViewPager.setAdapter(new TopNewsAdapter());mIndicator.setViewPager(mViewPager);mIndicator.setSnap(true);// 支持快照显示,即不是慢慢的滑过去,而是跳过去mIndicator.setOnPageChangeListener(this);mIndicator.onPageSelected(0);// 让指示器重新定位到第一个点tvTitle.setText(mTopNewsList.get(0).title);//首先让他显示个字}if (mNewsList != null) {mNewsAdapter = new NewsAdapter();lvList.setAdapter(mNewsAdapter);}}/*** 头条新闻适配器** @author Kevin**/class TopNewsAdapter extends PagerAdapter {private BitmapUtils utils;public TopNewsAdapter() {utils = new BitmapUtils(mActivity);utils.configDefaultLoadingImage(R.drawable.topnews_item_default);// 设置默认图片}@Overridepublic int getCount() {return mTabDetailData.data.topnews.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {ImageView image = new ImageView(mActivity);image.setScaleType(ScaleType.FIT_XY);// 基于控件大小填充图片TopNewsData topNewsData = mTopNewsList.get(position);utils.display(image, topNewsData.topimage);// 传递imagView对象和图片地址container.addView(image);System.out.println("instantiateItem....." + position);return image;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}}/*** 新闻列表的适配器** @author Kevin**/class NewsAdapter extends BaseAdapter {private BitmapUtils utils;public NewsAdapter() {utils = new BitmapUtils(mActivity);utils.configDefaultLoadingImage(R.drawable.pic_item_list_default);}@Overridepublic int getCount() {return mNewsList.size();}@Overridepublic TabNewsData getItem(int position) {return mNewsList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = View.inflate(mActivity, R.layout.list_news_item,null);holder = new ViewHolder();holder.ivPic = (ImageView) convertView.findViewById(R.id.iv_pic);holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title);holder.tvDate = (TextView) convertView.findViewById(R.id.tv_date);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}TabNewsData item = getItem(position);holder.tvTitle.setText(item.title);holder.tvDate.setText(item.pubdate);utils.display(holder.ivPic, item.listimage);return convertView;}}static class ViewHolder {public TextView tvTitle;public TextView tvDate;public ImageView ivPic;}@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageSelected(int arg0) {TopNewsData topNewsData = mTopNewsList.get(arg0);tvTitle.setText(topNewsData.title);}}
9.indicate、xutils、json的更多相关文章
- 安卓开发常用网络请求框架OkHttp、Volley、XUtils、Retrofit对比
网络请求框架总结1.xutils 此框架庞大而周全,这个框架可以网络请求,同时可以图片加载,又可以数据存储,又可以 View 注解,使用这种框架很方便,这样会使得你整个项目对它依赖性太强,万一 ...
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
- python常用模块json、os、sys
一.序列化 json & pickle 模块 json--用于字符串和Python数据类型间进行转换 pickle---用于python特有的类型和Python的数据类型间进行转换 json: ...
- json、javaBean、xml互转的几种工具介绍
json.javaBean.xml互转的几种工具介绍 转载至:http://blog.csdn.net/sdyy321/article/details/7024236 工作中经常要用到Json.Jav ...
- C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。
C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...
- [Network] HTML、XML和JSON学习汇总
写在前面:楼主也是刚刚接触这方面的知识,之前完全是零基础,后来经朋友推荐了几个不错的博文,看完以后豁然开朗.但是此博文更加偏重于基础知识介绍(其实更深的楼主也还不了解,这方面的大神请绕道),只是分享个 ...
- PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据
如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的 ...
- C#、js、json Datetime格式总结
在工作过程中遇到时间格式的数据在C#.js 和 json保存的不同结果,现在总结一下 JavaScript Parser: 1.数字型时间转字符串时间 如var data = "/Date( ...
- Android 中的Json解析工具fastjson 、序列化、反序列化
Android中通常需要访问服务器,然而服务器返回的数据很多时候都是Json格式 1.fastjson简介 阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备 ...
随机推荐
- Selenium + Chrome headless 报ERROR:gpu_process_transport_factory.cc(1007)] Lost UI shared context 可忽略并配置不输出日志
Selenium不再推荐使用PhantomJS,会报如下警告 UserWarning: Selenium support for PhantomJS has been deprecated, plea ...
- 【原】 The Linux Command Line- pwd,cd,ls,file,less
pwd - print name of current working directory. cd - change directory ls - list directory contents fi ...
- week07 13.1 NewsPipeline之 一 NewsMonitor
我们要重构一下代码 因为我们之前写了utils 我们的NewsPipeline部分也要用到 所以我们把他们单独独立得拿出来 删掉原来的 将requirements.txt也拿出去 现在我们搬家完成 我 ...
- (转)VS2010反编译dll之后存在的resource修改为resx
https://www.cnblogs.com/tangbaono1/p/6897183.html 1.找到安装VS的时候,存在的ResGen.exe,我的电脑是win7的,路径是在C:\Progra ...
- 吴裕雄 python深度学习与实践(14)
import numpy as np import tensorflow as tf import matplotlib.pyplot as plt threshold = 1.0e-2 x1_dat ...
- HALCON示例:BOTTLE.HDEV 光学字符识别(分割OCR)
* * bottle.hdev: Segment and read numbers on a beer bottle 分割读取啤酒瓶上的数字* * Step 0: Preparations* Spec ...
- const命令声明变量应注意的几点
对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址.const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心. const person = ...
- Spring学习,初识Spring
Spring概述 将Spring理解为管理对象间依赖关系的容器 “解耦” 根据功能的不同,可以将一个系统中的代码分为 主业务逻辑 与 系统级业务逻辑 两类 ```Spring 是为了解决企业级开发的复 ...
- Java方法区(Method Area)
方法区与Java堆一样,是各个线程共享的内存区域,他在与存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据,虽然Java虚拟机规范把方法区描述为堆得一个逻辑部分,但是他却有一个别 ...
- Python项目--Scrapy框架(二)
本文主要是利用scrapy框架爬取果壳问答中热门问答, 精彩问答的相关信息 环境 win8, python3.7, pycharm 正文 1. 创建scrapy项目文件 在cmd命令行中任意目录下执行 ...

