177.n1-组图
来源:互联网 发布:四驱车凯旋战神淘宝 编辑:程序博客网 时间:2024/06/05 06:29
组图有2种形式,一种是以listView的形式实现一种是以GridView的方式显示,两种显示方法是通过一种显示的时候另一种隐藏来实现切换的.按钮实在BsePager中进行设置的,一开始是不可见,当menu在组图处点击的时候显示切换按钮,由于组图切换的按钮是在基类中定义的,为了获取到按钮的对象,需要在NewsCenterPager.java中创建组图pager的时候在参数中带上mPagers.add(new PhotoMenuDetailPager(mActivity, btn_photo));
BasePager.xml中添加ImageButton用于切换显示是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="match_parent" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/title_red_bg" > <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:textColor="#ffffff" android:textSize="22sp" android:text="智慧城市" /><ImageButton android:id="@+id/btn_menu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:layout_centerVertical="true" android:layout_marginLeft="5dp" android:src="@drawable/img_menu" /><ImageButton android:id="@+id/btn_photo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:layout_centerVertical="true" android:layout_marginRight="5dp" android:layout_alignParentRight="true" android:src="@drawable/icon_pic_grid_type" android:visibility="gone" /> </RelativeLayout> <FrameLayout android:id="@+id/fl_content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" ></FrameLayout> </LinearLayout>
然后在BasePager.java中获取到ImageButton对象
在NewsCenterPager.java中实现图片的展示,并将图片作为参数,携带到初始化的组图pager中
package com.ldw.beijing.base.impl;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.ldw.beijing.MainActivity;import com.ldw.beijing.base.BaseMenuDetailPager;import com.ldw.beijing.base.BasePager;import com.ldw.beijing.base.menudetails.InteractMenuDetailPager;import com.ldw.beijing.base.menudetails.NewsMenuDetailPager;import com.ldw.beijing.base.menudetails.PhotoMenuDetailPager;import com.ldw.beijing.base.menudetails.TopicMenuDetailPager;import com.ldw.beijing.domain.NewsData;import com.ldw.beijing.domain.NewsData.NewsMenuData;import com.ldw.beijing.fragment.LeftMenuFragment;import com.ldw.beijing.global.ClobalContants;import com.ldw.beijing.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;/** * 新闻中心 * * @author Kevin * */public class NewsCenterPager extends BasePager {// 4个菜单详情页的集合,填充左侧菜单栏对应的ViewPager中的详情private ArrayList<BaseMenuDetailPager> mPagers;private NewsData mNewsData;public NewsCenterPager(Activity activity) {super(activity);}@Overridepublic void initData() {System.out.println("初始化设置数据....");tvTitle.setText("新闻");//btnMenu.setVisibility(View.GONE);// 隐藏菜单按钮setSlidingMenuEnable(true);// 关闭侧边栏/*TextView text = new TextView(mActivity);text.setText("设置");text.setTextColor(Color.RED);text.setTextSize(25);text.setGravity(Gravity.CENTER);// 向FrameLayout中动态添加布局flContent.addView(text);*///读取缓存,String cache = CacheUtils.getCache(ClobalContants.CATEGORIES_URL, mActivity);if(!TextUtils.isEmpty(cache)){//缓存存在,直接解析数据,不需要从服务器读取parseData(cache);}//从服务器中获取数据,从后台可以更新数据getDataFromServer();}/* * 从服务器中获取数据,使用xUtils实现 */private void getDataFromServer(){HttpUtils utils = new HttpUtils();//参数是String获取到的是Stringutils.send(HttpMethod.GET, ClobalContants.CATEGORIES_URL, new RequestCallBack<String>(){@Overridepublic void onSuccess(ResponseInfo<String> responseInfo) {//获取到返回的结果String result = (String) responseInfo.result;System.out.println("返回结果:" + result);parseData(result);//设置缓存CacheUtils.setCache(ClobalContants.CATEGORIES_URL, result, mActivity);}//访问失败@Overridepublic void onFailure(HttpException error, String msg) {Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT).show();//打印错误信息error.printStackTrace();}});}/* * 解析网络数据 */protected void parseData(String result) {//使用Gson解析Gson gson = new Gson();//第一个参数是数据,第二个参数是要转化成什么对象mNewsData = gson.fromJson(result, NewsData.class);System.out.println("解析结果:" + mNewsData);// 刷新测边栏的数据,利用MainActivity获取到左侧边栏的数据MainActivity mainUi = (MainActivity) mActivity;//获取到左侧边栏的对象LeftMenuFragment leftMenuFragment = mainUi.getLeftMenuFragment();//设置网络数据leftMenuFragment.setMenuData(mNewsData);//设置4个菜单详情页,LeftMenuFragment和内容的交互,需要调用这里的方法,来初始化侧边栏对应的内容mPagers = new ArrayList<BaseMenuDetailPager>();//获取到data条目下面,news对于页面的children数据,初始化详情页的构造函数mPagers.add(new NewsMenuDetailPager(mActivity, mNewsData.data.get(0).children));mPagers.add(new TopicMenuDetailPager(mActivity));mPagers.add(new PhotoMenuDetailPager(mActivity, btn_photo));mPagers.add(new InteractMenuDetailPager(mActivity));// 设置菜单详情页-新闻为默认当前页setCurrentMenuDetailPager(0);}//设置当前的菜单详情页,显示哪一个详情页,LeftMenuFragment和内容的交互public void setCurrentMenuDetailPager(int position){//获取到某一个位置的pagerBaseMenuDetailPager pager = mPagers.get(position);// 清除之前的布局,fragment布局的内容会叠加flContent.removeAllViews();//填充内容,mRebootView就是初始化的某一个子页面,设置给frameLayoutflContent.addView(pager.mRebootView);// 设置当前页的标题NewsMenuData menuData = mNewsData.data.get(position);tvTitle.setText(menuData.title);// 初始化当前页面的数据pager.initData();if(pager instanceof PhotoMenuDetailPager){btn_photo.setVisibility(View.VISIBLE);}else{btn_photo.setVisibility(View.GONE);}}}
组图的布局menu_photo_pager.xml
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- menu中组图的布局 --> <ListView android:id="@+id/lv_photo" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="#fff" android:divider="@null" ></ListView> <GridView android:id="@+id/gv_photo" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="2" android:visibility="gone" ></GridView></FrameLayout>
单个条目的布局list_photo_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="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:background="@drawable/pic_list_item_bg" android:gravity="center" android:orientation="vertical" > <ImageView android:id="@+id/iv_pic" android:layout_width="match_parent" android:layout_height="180dp" 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="10dp" android:text="标题" android:singleLine="true" android:textColor="#000" android:textSize="22sp" /> </LinearLayout></LinearLayout>
逻辑页面PhotoMenuDetailPager.java解析json数据获取到数据然后初始化列表
package com.ldw.beijing.base.menudetails;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.ldw.beijing.R;import com.ldw.beijing.base.BaseMenuDetailPager;import com.ldw.beijing.domain.PhotosData;import com.ldw.beijing.domain.PhotosData.PhotoInfo;import com.ldw.beijing.global.ClobalContants;import com.ldw.beijing.utils.CacheUtils;import com.lidroid.xutils.BitmapUtils;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 PhotoMenuDetailPager extends BaseMenuDetailPager {private ArrayList<PhotoInfo> mPhotoList;private PhotoAdapter mAdapter;private ImageButton btn_photo;private ListView lv_photo;private GridView gv_photo;public PhotoMenuDetailPager(Activity activity, ImageButton btn_photo) {super(activity);//获取到切换的对象this.btn_photo = btn_photo;btn_photo.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// 按钮点击的时候切换展示方式changeDisplay();}});}@Overridepublic View initView() {View view = View.inflate(mActivity, R.layout.menu_photo_pager, null);lv_photo = (ListView) view.findViewById(R.id.lv_photo);gv_photo = (GridView) view.findViewById(R.id.gv_photo);return view;}@Overridepublic void initData() {//读取缓存String cache = CacheUtils.getCache(ClobalContants.PHOTOS_URL, mActivity);if (!TextUtils.isEmpty(cache)) {}//服务器中读取数据getDataFromServer();}private void getDataFromServer() {HttpUtils utils = new HttpUtils();utils.send(HttpMethod.GET, ClobalContants.PHOTOS_URL,new RequestCallBack<String>() {@Overridepublic void onSuccess(ResponseInfo<String> responseInfo) {String result = (String) responseInfo.result;//解析json数据parseData(result);// 设置缓存CacheUtils.setCache(ClobalContants.PHOTOS_URL, result,mActivity);}@Overridepublic void onFailure(HttpException error, String msg) {Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT).show();error.printStackTrace();}});}//解析json数据protected void parseData(String result) {Gson gson = new Gson();PhotosData data = gson.fromJson(result, PhotosData.class);mPhotoList = data.data.news;// 获取组图列表集合if (mPhotoList != null) {mAdapter = new PhotoAdapter();lv_photo.setAdapter(mAdapter);gv_photo.setAdapter(mAdapter);}}class PhotoAdapter extends BaseAdapter{private BitmapUtils utils;//构造函数public PhotoAdapter() {utils = new BitmapUtils(mActivity);//默认加载图片utils.configDefaultLoadingImage(R.drawable.news_pic_default);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mPhotoList.size();}@Overridepublic PhotoInfo getItem(int position) {// TODO Auto-generated method stubreturn mPhotoList.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = View.inflate(mActivity, R.layout.list_photo_item,null);holder = new ViewHolder();holder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);holder.iv_pic = (ImageView) convertView.findViewById(R.id.iv_pic);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}PhotoInfo item = getItem(position);//设置标题holder.tv_title.setText(item.title);//显示图片utils.display(holder.iv_pic, item.listimage);return convertView;}}static class ViewHolder {public TextView tv_title;public ImageView iv_pic;}// 是否是列表展示private boolean isListDisplay = true;/* * 切换展现方式 */private void changeDisplay() {//当前是listView展示的时候需要切换到GridView展示if (isListDisplay) {isListDisplay = false;lv_photo.setVisibility(View.GONE);gv_photo.setVisibility(View.VISIBLE);//修改图标的样式btn_photo.setImageResource(R.drawable.icon_pic_list_type);} else {isListDisplay = true;lv_photo.setVisibility(View.VISIBLE);gv_photo.setVisibility(View.GONE);//修改图标的样式为GridViewbtn_photo.setImageResource(R.drawable.icon_pic_grid_type);}}}
bean数据PhotosData.java
package com.ldw.beijing.domain;import java.util.ArrayList;/** * 组图数据 * * @author Kevin * */public class PhotosData {public int retcode;public PhotosInfo data;public class PhotosInfo {public String title;public ArrayList<PhotoInfo> news;}public class PhotoInfo {public String id;public String listimage;public String pubdate;public String title;public String type;public String url;}}
阅读全文
0 0
- 177.n1-组图
- N1
- 177.n1-banner的监听
- N1 goi
- VOID N1
- 20150202 N1
- 20150203 N1
- 20150204 N1
- 20150212 N1
- 20150213 N1
- 20150226 N1
- 20150227 N1
- 20150228 N1
- 20150302 N1
- 20150303 N1
- 20150304 N1
- 20150305 N1
- 20150306 N1
- java默认构造器以及this关键字
- c++标准模板库简介
- 在大数据下,微信眼中的你是什么身份?05/22
- qduoj ycb老师与一道简单的物理题 三分
- 文章标题
- 177.n1-组图
- SPOJ:EXPOR
- io流的使用
- rabbitmq集群搭建(多机)
- Mongodb学习(7)pymongdb的使用——打印数据库名和table名
- 2017省赛总结
- Scrapy入门教程
- Redis之——Redis 集群的安装(Redis+CentOS)
- linux 6安装oracle 12c系统需求