ListView、GridView显示组图,处理机制相同

<?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" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:background="@drawable/pic_list_item_bg"
android:orientation="vertical" > <ImageView
android:id="@+id/iv_icon"
android:layout_width="match_parent"
android:layout_height="160dp"
android:scaleType="centerCrop"
android:src="@drawable/news_pic_default" /> <TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:singleLine="true"
android:text="标题"
android:textColor="#000"
android:textSize="18sp" />
</LinearLayout> </LinearLayout>

list_item_photo.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" > <FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent" > <ListView
android:id="@+id/lv_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#fff"
android:divider="@null" >
</ListView> <GridView
android:id="@+id/gv_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="2"
android:visibility="gone" >
</GridView>
</FrameLayout> </LinearLayout>

pager_menu_detail_photo.xml

import java.util.ArrayList;

/**
* 组图对象封装
*
*/
public class PhotoBean {
public int retcode;
public PhotoData data; public class PhotoData {
public ArrayList<PhotoNewsData> news;
} public class PhotoNewsData {
public String id;
public String listimage;
public String pubdate;
public String title;
public String url;
}
}

PhotoBean

import java.util.ArrayList;

import android.app.Activity;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; import com.google.gson.Gson;
import com.itheima.zhsh66.R;
import com.itheima.zhsh66.base.BaseMenuDetailPager;
import com.itheima.zhsh66.domain.PhotoBean;
import com.itheima.zhsh66.domain.PhotoBean.PhotoNewsData;
import com.itheima.zhsh66.global.Constants;
import com.itheima.zhsh66.utils.CacheUtils;
import com.lidroid.xutils.BitmapUtils;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.ViewUtils;
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;
import com.lidroid.xutils.view.annotation.ViewInject; /**
* 菜单详情页-组图
*
*/
public class PhotosMenuDetailPager extends BaseMenuDetailPager implements
OnClickListener { @ViewInject(R.id.lv_list)
private ListView lvList;
@ViewInject(R.id.gv_list)
private GridView gvList; private ArrayList<PhotoNewsData> mPhotoList; private boolean isList = true;// 当前界面状态 private ImageButton btnDisplay; public PhotosMenuDetailPager(Activity activity, ImageButton btnDisplay) {
super(activity);
this.btnDisplay = btnDisplay;
btnDisplay.setOnClickListener(this);
} @Override
public View initView() {
View view = View.inflate(mActivity, R.layout.pager_menu_detail_photo,
null);
ViewUtils.inject(this, view);
return view;
} @Override
public void initData() {
String cache = CacheUtils.getCache(Constants.PHOTOS_URL, mActivity);
if (!TextUtils.isEmpty(cache)) {
processResult(cache);
} getDataFromServer();
} private void getDataFromServer() {
HttpUtils utils = new HttpUtils();
utils.send(HttpMethod.GET, Constants.PHOTOS_URL,
new RequestCallBack<String>() { @Override
public void onSuccess(ResponseInfo<String> responseInfo) {
processResult(responseInfo.result); CacheUtils.setCache(Constants.PHOTOS_URL,
responseInfo.result, mActivity);
} @Override
public void onFailure(HttpException error, String msg) {
error.printStackTrace();
Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT)
.show();
}
});
} protected void processResult(String result) {
Gson gson = new Gson();
PhotoBean photoBean = gson.fromJson(result, PhotoBean.class);
mPhotoList = photoBean.data.news; lvList.setAdapter(new PhotoAdapter());
gvList.setAdapter(new PhotoAdapter());
} class PhotoAdapter extends BaseAdapter { private BitmapUtils mBitmapUtils; public PhotoAdapter() {
mBitmapUtils = new BitmapUtils(mActivity);
mBitmapUtils.configDefaultLoadingImage(R.drawable.news_pic_default);
} @Override
public int getCount() {
return mPhotoList.size();
} @Override
public PhotoNewsData getItem(int position) {
return mPhotoList.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = View.inflate(mActivity, R.layout.list_item_photo,
null);
holder = new ViewHolder();
holder.tvTitle = (TextView) convertView
.findViewById(R.id.tv_title);
holder.ivIcon = (ImageView) convertView
.findViewById(R.id.iv_icon); convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
} PhotoNewsData item = getItem(position); holder.tvTitle.setText(item.title);
mBitmapUtils.display(holder.ivIcon, item.listimage); return convertView;
} } static class ViewHolder {
public TextView tvTitle;
public ImageView ivIcon;
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_display:
// 如果当前是列表, 要切换成grid, 如果是grid,就切换成列表
if (isList) {
isList = false; lvList.setVisibility(View.GONE);
gvList.setVisibility(View.VISIBLE); btnDisplay.setImageResource(R.drawable.icon_pic_list_type);
} else {
isList = true; lvList.setVisibility(View.VISIBLE);
gvList.setVisibility(View.GONE); btnDisplay.setImageResource(R.drawable.icon_pic_grid_type);
} break; default:
break;
}
}
}

PhotosMenuDetailPager

共用一个Adapter

protected void processResult(String result) {
Gson gson = new Gson();
PhotoBean photoBean = gson.fromJson(result, PhotoBean.class);
mPhotoList = photoBean.data.news;

lvList.setAdapter(new PhotoAdapter());
gvList.setAdapter(new PhotoAdapter());
}

缓存到本地

public void initData() {
String cache = CacheUtils.getCache(Constants.PHOTOS_URL, mActivity);
if (!TextUtils.isEmpty(cache)) {
processResult(cache);
}

getDataFromServer();
}

------------------------------------------------------------------------------

初始化标题按钮(Base )

<?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" > <include layout="@layout/title_bar" /> <FrameLayout
android:id="@+id/fl_content"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout> </LinearLayout>
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.TextView; import com.itheima.zhsh66.MainActivity;
import com.itheima.zhsh66.R;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; /**
* 五个标签页的基类
*
*/
public abstract class BasePager { public Activity mActivity; // 标签页面的根布局
public View mRootView; public TextView tvTitle;
public ImageButton btnMenu;
// 帧布局容器, 将来要动态向里面添加内容
public FrameLayout flContent; // 组图切换按钮
public ImageButton btnDisplay; public BasePager(Activity activity) {
mActivity = activity;
initView();
} /**
* 初始化布局
*/
public void initView() {
mRootView = View.inflate(mActivity, R.layout.base_pager, null);
tvTitle = (TextView) mRootView.findViewById(R.id.tv_title);
btnMenu = (ImageButton) mRootView.findViewById(R.id.btn_menu);
flContent = (FrameLayout) mRootView.findViewById(R.id.fl_content);
btnDisplay = (ImageButton) mRootView.findViewById(R.id.btn_display); btnMenu.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
toggle();
}
});
} /**
* 侧边栏展开或者收起的方法
*/
private void toggle() {
MainActivity mainUI = (MainActivity) mActivity;
SlidingMenu slidingMenu = mainUI.getSlidingMenu();
slidingMenu.toggle();// 开关(如果状态为开,它就关;如果状态为关,它就开)
} /**
* 初始化数据
*/
public abstract void initData();
}

BasePager

------------------------------------------------------------------------------

对按钮的传递、调用

if (pager instanceof PhotosMenuDetailPager) {

import java.util.ArrayList;

import android.app.Activity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Toast; import com.google.gson.Gson;
import com.itheima.zhsh66.MainActivity;
import com.itheima.zhsh66.base.BaseMenuDetailPager;
import com.itheima.zhsh66.base.BasePager;
import com.itheima.zhsh66.base.impl.menudetail.InteractMenuDetailPager;
import com.itheima.zhsh66.base.impl.menudetail.NewsMenuDetailPager;
import com.itheima.zhsh66.base.impl.menudetail.PhotosMenuDetailPager;
import com.itheima.zhsh66.base.impl.menudetail.TopicMenuDetailPager;
import com.itheima.zhsh66.domain.NewsMenuData;
import com.itheima.zhsh66.global.Constants;
import com.itheima.zhsh66.utils.CacheUtils;
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; /**
* 新闻中心
*
*/
public class NewsCenterPager extends BasePager { // 菜单详情页集合
private ArrayList<BaseMenuDetailPager> mMenuDetailPagers;
private NewsMenuData mNewsMenuData;// 新闻分类信息网络数据 public NewsCenterPager(Activity activity) {
super(activity);
} @Override
public void initData() {
System.out.println("新闻中心初始化...");
tvTitle.setText("新闻"); // 1.首先先看本地有没有缓存
// 2.有缓存,直接加载缓存
String cache = CacheUtils.getCache(Constants.CATEGORIES_URL, mActivity);
if (!TextUtils.isEmpty(cache)) {
// 有缓存
System.out.println("发现缓存....");
processResult(cache);
} // 即使发现有缓存,仍继续调用网络, 获取最新数据
getDataFromServer();
} /**
* 从服务器获取数据 需要权限: <uses-permission
* android:name="android.permission.INTERNET"/>
*/
private void getDataFromServer() {
HttpUtils utils = new HttpUtils();
utils.send(HttpMethod.GET, Constants.CATEGORIES_URL,
new RequestCallBack<String>() { @Override
public void onSuccess(ResponseInfo<String> responseInfo) {
// 请求成功
String result = responseInfo.result;// 获取json字符串
// System.out.println("result:" + result);
processResult(result);
// 写缓存
CacheUtils.setCache(Constants.CATEGORIES_URL, result,
mActivity);
} @Override
public void onFailure(HttpException error, String msg) {
// 请求失败
error.printStackTrace();
Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT)
.show();
}
});
} /**
* 解析json数据
*
* @param result
*/
protected void processResult(String result) {
// gson->json
Gson gson = new Gson();
mNewsMenuData = gson.fromJson(result, NewsMenuData.class);
System.out.println("解析结果:" + mNewsMenuData); // 获取侧边栏对象
MainActivity mainUI = (MainActivity) mActivity;
LeftMenuFragment leftMenuFragment = mainUI.getLeftMenuFragment();
// 将网络数据设置给侧边栏
leftMenuFragment.setData(mNewsMenuData.data); // 初始化4个菜单详情页
mMenuDetailPagers = new ArrayList<BaseMenuDetailPager>();
mMenuDetailPagers.add(new NewsMenuDetailPager(mActivity,
mNewsMenuData.data.get(0).children));
mMenuDetailPagers.add(new TopicMenuDetailPager(mActivity));
mMenuDetailPagers.add(new PhotosMenuDetailPager(mActivity, btnDisplay));
mMenuDetailPagers.add(new InteractMenuDetailPager(mActivity)); // 菜单详情页-新闻作为初始页面
setCurrentMenuDetailPager(0);
} // 给新闻中心页面的FrameLayout填充布局
protected void setCurrentMenuDetailPager(int position) {
BaseMenuDetailPager pager = mMenuDetailPagers.get(position);
// 移除之前所有的view对象, 清理屏幕
flContent.removeAllViews();
flContent.addView(pager.mRootView);
pager.initData();// 初始化数据 // 更改标题
tvTitle.setText(mNewsMenuData.data.get(position).title); // 组图页面需要显示切换按钮
if (pager instanceof PhotosMenuDetailPager) {
btnDisplay.setVisibility(View.VISIBLE);
} else {
btnDisplay.setVisibility(View.GONE);
}
} }

NewsCenterPager

android 项目学习随笔十七(ListView、GridView显示组图)的更多相关文章

  1. android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)

    1.因为给LISTVIEW增加了两个头布局,所以在点击事件ITEM索引会增加2,比如原来第一条数据的索引应该为0,增加两个头布局后,它的索引变为        2,为了使LISTVIEW的ITEM在点 ...

  2. android 项目学习随笔十二(ListView加脚布局)

    1.ListView加脚布局 头布局initHeaderView,在onTouchEvent事件中进行显示隐藏头布局切换 脚布局initFooterView,实现接口OnScrollListener, ...

  3. android 项目学习随笔十一(ListView下拉刷新提示)

    1. 设置mHeaderView.setPadding TOPPADING为负值,隐藏刷新提示头布局 在onTouchEvent事件中进行头布局显示隐藏切换 import java.text.Simp ...

  4. android 项目学习随笔九(ListView加头布局)

    1.缓冲背景色 <ListView android:id="@+id/lv_list" android:layout_width="match_parent&quo ...

  5. android 项目学习随笔二十一(IM、语音识别、机器人、统计、扫描二维码、条形码)

    语音识别:科大讯飞语音云 http://www.xfyun.cn/ 语音机器人模拟 public class TalkBean { public String text; public boolean ...

  6. android 项目学习随笔十八(三级缓存)

    xUtils的BitmapUtils模块用的就是三级缓存,在项目中尽量还是应用BitmapUtils 三级缓存(机制) import com.itheima.zhsh66.R; import andr ...

  7. android 项目学习随笔二十(屏幕适配)

    1.图片适配 放入相同名称的资源文件,机器根据不同分辨率找相近的资源 240*320 ldpi 320*480 mdpi 480*800 hdpi 720*1280 xhdpi 2.布局适配 在不同的 ...

  8. android 项目学习随笔十六( 广告轮播条播放)

    广告轮播条播放 if (mHandler == null) {//在此初始化mHandler , 保证消息不重复发送 mHandler = new Handler() { public void ha ...

  9. android 项目学习随笔十四(WebView)

    1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro ...

随机推荐

  1. 导入maven工程并配置maven环境

    步骤一 : 选择 "Import"操作 有两个途径可以选择 "Import"操作; 1>"File"--> "Impo ...

  2. iOS:GPUImage强大的图像处理框架

    GPUImage是一个非常棒的图像处理的开源库,里面提供了非常非常多的滤镜效果来加工图像. 不过就是因为太多效果了,而且对于程序员来说,那么多效果并不清楚知道要用那一个.于是我就使用提供的默认值,加上 ...

  3. 微信去除 防欺诈盗号请勿支付或输入qq密码 以及 防欺诈或盗号请不要输入qq密码 的方法

    本文介绍如何去除微信顶部的“防欺诈盗号,请勿支付或输入qq密码”.或 “防欺诈或盗号,请不要输入qq密码”如图所示.    一.微信认证 目前只有已经通过微信认证的账号可以去除这个提示.在公众账号下左 ...

  4. JBoss远程方法调用漏洞利用详解

    早上起床打开微博看到空虚浪子心大神发的一篇有关Jboss漏洞的文章,对我等菜鸟来说那边文章看起来还是很吃力的,所以查了查国内外的资料,翻译写了这边文章,记录一下. 在JBoss服务器上部署web应用程 ...

  5. 浅谈负载均衡SLB、CLB和综合应用

    SLB     服务器负载均衡(Server Load Balancing),可以看作HSRP(热备份路由器协议)的扩展,实现多个服务器之间的负载均衡.     虚拟服务器代表的是多个真实服务器的群集 ...

  6. SQL Server中的uniqueidentifier类型

    uniqueidentifier类型可以配合T-SQL中的newid和newsequentialid来生成唯一标识符,具体区别如下(摘抄自微软官方文档). Nonsequential GUIDs: Y ...

  7. checkbox判断选中

    $("input[type='checkbox']").is(':checked')

  8. 11G中自动收集统计信息

    在11G中,引入了一个名为 gather_stats_prog 的自动运行任务专用于自动收集统计信息.其对应的客户端名称为"auto optimizer stats collection&q ...

  9. Java基础之读文件——使用通道读二进制数据(ReadPrimes)

    控制台程序,本例读取Java基础之写文件部分(PrimesToFile)写入的primes.bin. import java.nio.file.*; import java.nio.*; import ...

  10. 配置suse自动化安装

    配置suse自动化安装 作者:尹正杰   版权声明:原创作品,谢绝转载!否则将追究法律责任.       前言:不知道你习惯用那款虚拟器,我用的是VMware Workstation,别问我为什么,因 ...