9.indicate、xutils、json

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;		@Override		public 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;		@Override		public 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;		@Override		public String toString() {			return "TopNewsData [title=" + title + "]";		}	}	@Override	public 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.TopNewsViewPager        android:id="@+id/vp_news"        android:layout_width="match_parent"        android:layout_height="200dp" />    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:background="#a000"        android:padding="3dp" >        <TextView            android: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>

2.list_news_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"     android:padding="10dp"    >    <ImageView        android: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" />    <TextView        android: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" />    <TextView        android: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>

3、tab_detail_pager.xml

<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.RefreshListView        android: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>

4.页签详情页

public class TabDetailPager extends BaseMenuDetailPager implements		OnPageChangeListener {	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);	}}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程之路

羊皮书APP(Android版)开发系列(十八)Android 侧滑菜单栏实现

1151
来自专栏向治洪

android drawable

android.graphics.drawable.Drawable是个虚类。 它的直接子类有 BitmapDrawable, ClipDrawable, Co...

20610
来自专栏LeoXu的博客

在ListView上使用自定义的Adapter

需要实现的东西是: 一个DataListViewAdapter,当进行如下调用时,就能在列表上显示出数据:

792
来自专栏浅探ARKit

AR的平面检测和利用SceneKit构建几何体

ar的检测方法是ARSCNView的代理的方法 主要代码如下: _jpARSCNView.delegate = self; <ARSCNViewDelega...

43514
来自专栏Android干货园

Android Toast提示封装

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/49...

2721
来自专栏Android干货

安卓开发_慕课网_ViewPager实现Tab(App主界面)

2837
来自专栏三好码农的三亩自留地

Android ListView适配器应该这样写

ViewHolder缓存View的思路我们还是要继续沿用,但是我们希望ViewHolderHelper能够适用所有Adapter,而且我们希望它能有更强大功能,...

1532
来自专栏Android知识点总结

3-VI--☆ListView的封装

1242
来自专栏Android干货

安卓开发_浅谈ListView(自定义适配器)

3026
来自专栏xingoo, 一个梦想做发明家的程序员

【插件开发】—— 6 SWT 复杂控件使用以及布局

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭...

2659

扫码关注云+社区

领取腾讯云代金券