博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
9.indicate、xutils、json
阅读量:4596 次
发布时间:2019-06-09

本文共 8909 字,大约阅读时间需要 29 分钟。

json数据
 
 
 页签详情页数据
  
 
  1. public class TabData {
  2. public int retcode;
  3. public TabDetail data;//不是数组的话类型就是这个
  4. public class TabDetail {
  5. public String title;
  6. public String more;
  7. public ArrayList<TabNewsData> news;
  8. public ArrayList<TopNewsData> topnews;
  9. @Override
  10. public String toString() {
  11. return "TabDetail [title=" + title + ", news=" + news
  12. + ", topnews=" + topnews + "]";
  13. }
  14. }
  15. /**
  16. * 新闻列表对象
  17. */
  18. public class TabNewsData {
  19. public String id;
  20. public String listimage;
  21. public String pubdate;
  22. public String title;
  23. public String type;
  24. public String url;
  25. @Override
  26. public String toString() {
  27. return "TabNewsData [title=" + title + "]";
  28. }
  29. }
  30. /**
  31. * 头条新闻
  32. */
  33. public class TopNewsData {
  34. public String id;
  35. public String topimage;
  36. public String pubdate;
  37. public String title;
  38. public String type;
  39. public String url;
  40. @Override
  41. public String toString() {
  42. return "TopNewsData [title=" + title + "]";
  43. }
  44. }
  45. @Override
  46. public String toString() {
  47. return "TabData [data=" + data + "]";
  48. }
  49. }
页签详情页
知识点:
  • 使用xutils加载网络图片,xutils的configDefaultLoadingImage()方法,设置默认图片 ,还有 BitmapFun 、ImageDownloader也能加载网络图片
  • xutils的注解,不需要fandviewbyid了,但是前提是需要注入事件ViewUtils.inject(this, view);
  • 可以给listview加个头,那样头也跟着滑动了,头上还能加头,lvList.addHeaderView(headerView);
  • indicate的使用
1.list_header_topnews.xml:头条新闻
由于indicate自带的下面的几个点很难看,可以根据自己的需求修改
 
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:app="http://schemas.android.com/apk/res-auto"//注意命名空间也需要拷过来
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content" >
  5. <com.itheima.zhbj52.view.TopNewsViewPager
  6. android:id="@+id/vp_news"
  7. android:layout_width="match_parent"
  8. android:layout_height="200dp" />
  9. <RelativeLayout
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"
  12. android:layout_alignParentBottom="true"
  13. android:background="#a000"
  14. android:padding="3dp" >
  15. <TextView
  16. android:id="@+id/tv_title"
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:textColor="#fff"
  20. android:textSize="16sp" />
  21. <com.viewpagerindicator.CirclePageIndicator//下面的几个点
  22. android:id="@+id/indicator"
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:layout_alignParentRight="true"
  26. android:padding="10dip"
  27. app:fillColor="#f00"//点选中的颜色
  28. app:pageColor="@android:color/darker_gray"//点默认的颜色
  29. app:radius="3dp"//大小
  30. app:strokeWidth="0dp" />//点外面的黑圆圈
  31. </RelativeLayout>
  32. </RelativeLayout>
2.list_news_item.xml
 
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="wrap_content"
  4. android:padding="10dp"
  5. >
  6. <ImageView
  7. android:id="@+id/iv_pic"
  8. android:layout_width="110dp"
  9. android:layout_height="70dp"
  10. android:scaleType="fitXY"
  11. android:padding="1dp"
  12. android:background="@android:color/darker_gray"//padding了一个dp,背景是灰色的,图片外就显示出了一个边框
  13. android:layout_alignParentLeft="true"
  14. android:layout_alignParentTop="true"
  15. android:src="@drawable/image_demo" />
  16. <TextView
  17. android:id="@+id/tv_title"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:layout_alignParentTop="true"
  21. android:layout_marginLeft="20dp"
  22. android:layout_toRightOf="@+id/iv_pic"
  23. android:text="新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题新闻标题"
  24. android:textColor="#000"
  25. android:maxLines="2"
  26. android:ellipsize="end"
  27. android:textSize="20sp" />
  28. <TextView
  29. android:id="@+id/tv_date"
  30. android:layout_width="wrap_content"
  31. android:layout_height="wrap_content"
  32. android:layout_alignLeft="@id/tv_title"
  33. android:text="2015-03-16 16:20"
  34. android:layout_alignBottom="@id/iv_pic"
  35. android:textColor="@android:color/darker_gray"
  36. android:textSize="16sp" />
  37. </RelativeLayout>
3、tab_detail_pager.xml
 
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:orientation="vertical" >
  5. <com.itheima.zhbj52.view.RefreshListView
  6. android:id="@+id/lv_list"
  7. android:layout_width="match_parent"
  8. android:layout_height="0dp"
  9. android:cacheColorHint="#fff"
  10. android:layout_weight="1" >
  11. </com.itheima.zhbj52.view.RefreshListView>
  12. </LinearLayout>
4.页签详情页
827512-20151027220754138-1596361394.png
 
  1. public class TabDetailPager extends BaseMenuDetailPager implements
  2. OnPageChangeListener {
  3.  
  4. 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设置的adapter
public TabDetailPager(Activity activity, NewsTabData newsTabData) {
super(activity);
mTabData = newsTabData;//new的时候把数据和连接地址也创建了
mUrl = GlobalContants.SERVER_URL + mTabData.url;
}
@Override
public 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);
// 将头条新闻以头布局的形式加给listview
lvList.addHeaderView(headerView);
return view;
}
@Override
public void initData() {
getDataFromServer();
}
private void getDataFromServer() {
HttpUtils utils = new HttpUtils();
utils.send(HttpMethod.GET, mUrl, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
String result = (String) responseInfo.result;
System.out.println("页签详情页返回结果:" + result);
parseData(result);
}
@Override
public 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);// 设置默认图片
}
@Override
public int getCount() {
return mTabDetailData.data.topnews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public 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;
}
@Override
public 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);
}
@Override
public int getCount() {
return mNewsList.size();
}
@Override
public TabNewsData getItem(int position) {
return mNewsList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public 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;
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int arg0) {
TopNewsData topNewsData = mTopNewsList.get(arg0);
tvTitle.setText(topNewsData.title);
}
}

转载于:https://www.cnblogs.com/sixrain/p/4915766.html

你可能感兴趣的文章
win10用filezilla server搭建ftp服务器一直无法访问
查看>>
字符串算法(KMP,Trie树,AC自动机)
查看>>
Oracle PL/SQL编程之过程
查看>>
Spring(三)--Spring bean的生命周期
查看>>
习题2-6排列(permutation)
查看>>
Mybatis基本配置(一)
查看>>
Android攻城狮布局动画
查看>>
正则表达式零宽断言详解(?=,?<=,?!,?<!)
查看>>
20145205 《Java程序设计》实验报告三:敏捷开发与XP实践
查看>>
利用Spring.NET实现WCF的AOP编程
查看>>
第三方,解决模型无法在获取网络数据之后传值问题
查看>>
对比 Git 与 SVN,这篇讲的很易懂
查看>>
【snmp】Linux开启snmp及查询
查看>>
CSU 1532: JuQueen(线段树)
查看>>
设定MyEclipse编辑代码区域文字的大小及非keyword的字体、字形和颜色
查看>>
LeetCode【6】. ZigZag Conversion --思路图解与java实现
查看>>
git 合并分支
查看>>
NSNotification与NSNotificationCenter
查看>>
qt 中文乱码 处理QByteArray类型里含中文的数据
查看>>
跨库事务一致性问题的解决方式(例)
查看>>