智慧北京4

来源:互联网 发布:网络流行语2016英文 编辑:程序博客网 时间:2024/04/28 03:53

1.下拉刷新的实现

1.用shape定义一个圆圈,用于进度条的背景图案
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?><rotate xmlns:android="http://schemas.android.com/apk/res/android"    android:fromDegrees="0"    android:pivotX="50%"    android:pivotY="50%"    android:toDegrees="360" >   <-   加一个动画->    <shape        android:innerRadius="12dp"        android:shape="ring"        android:thickness="3dp"        android:useLevel="false" <-   去掉控件自带的动画->>        <gradient            android:centerColor="#3f00"            android:endColor="#f00"            android:startColor="#fff"   />    </shape></rotate></span>

2.改变进度条的背景图案
<span style="font-size:14px;"> <ProgressBar            android:id="@+id/pb_progress"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:indeterminateDrawable="@drawable/custom_progress"            android:visibility="invisible" /></span>


 2.加载更多实现

1.下拉刷新接口定义
<span style="font-size:14px;">OnRefreshListener listener;        public void setOnRefreshListener(OnRefreshListener listener) {mListener = listener;}public interface OnRefreshListener {public void onRefresh();}</span>

<span style="font-size:14px;">if (mListener != null) {mListener.onRefresh();}</span>
onRefresh()在那里调用

2.下拉刷新总代码
<span style="font-size:14px;">/** * 下拉刷新的ListView *  * @author Kevin *  */public class RefreshListView extends ListView implements OnScrollListener,android.widget.AdapterView.OnItemClickListener {private static final int STATE_PULL_REFRESH = 0;// 下拉刷新private static final int STATE_RELEASE_REFRESH = 1;// 松开刷新private static final int STATE_REFRESHING = 2;// 正在刷新private View mHeaderView;private int startY = -1;// 滑动起点的y坐标private int mHeaderViewHeight;private int mCurrrentState = STATE_PULL_REFRESH;// 当前状态private TextView tvTitle;private TextView tvTime;private ImageView ivArrow;private ProgressBar pbProgress;private RotateAnimation animUp;private RotateAnimation animDown;public RefreshListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);initHeaderView();initFooterView();}public RefreshListView(Context context, AttributeSet attrs) {super(context, attrs);initHeaderView();initFooterView();}public RefreshListView(Context context) {super(context);initHeaderView();initFooterView();}/** * 初始化头布局 */private void initHeaderView() {mHeaderView = View.inflate(getContext(), R.layout.refresh_header, null);this.addHeaderView(mHeaderView);tvTitle = (TextView) mHeaderView.findViewById(R.id.tv_title);tvTime = (TextView) mHeaderView.findViewById(R.id.tv_time);ivArrow = (ImageView) mHeaderView.findViewById(R.id.iv_arr);pbProgress = (ProgressBar) mHeaderView.findViewById(R.id.pb_progress);mHeaderView.measure(0, 0);mHeaderViewHeight = mHeaderView.getMeasuredHeight();mHeaderView.setPadding(0, -mHeaderViewHeight, 0, 0);// 隐藏头布局initArrowAnim();tvTime.setText("最后刷新时间:" + getCurrentTime());}/* * 初始化脚布局 */private void initFooterView() {mFooterView = View.inflate(getContext(),R.layout.refresh_listview_footer, null);this.addFooterView(mFooterView);mFooterView.measure(0, 0);mFooterViewHeight = mFooterView.getMeasuredHeight();mFooterView.setPadding(0, -mFooterViewHeight, 0, 0);// 隐藏this.setOnScrollListener(this);}@Overridepublic boolean onTouchEvent(MotionEvent ev) {switch (ev.getAction()) {case MotionEvent.ACTION_DOWN:startY = (int) ev.getRawY();break;case MotionEvent.ACTION_MOVE:if (startY == -1) {// 确保startY有效startY = (int) ev.getRawY();}if (mCurrrentState == STATE_REFRESHING) {// 正在刷新时不做处理break;}int endY = (int) ev.getRawY();int dy = endY - startY;// 移动便宜量if (dy > 0 && getFirstVisiblePosition() == 0) {// 只有下拉并且当前是第一个item,才允许下拉int padding = dy - mHeaderViewHeight;// 计算paddingmHeaderView.setPadding(0, padding, 0, 0);// 设置当前paddingif (padding > 0 && mCurrrentState != STATE_RELEASE_REFRESH) {// 状态改为松开刷新mCurrrentState = STATE_RELEASE_REFRESH;refreshState();} else if (padding < 0 && mCurrrentState != STATE_PULL_REFRESH) {// 改为下拉刷新状态mCurrrentState = STATE_PULL_REFRESH;refreshState();}return true;}break;case MotionEvent.ACTION_UP:startY = -1;// 重置if (mCurrrentState == STATE_RELEASE_REFRESH) {mCurrrentState = STATE_REFRESHING;// 正在刷新mHeaderView.setPadding(0, 0, 0, 0);// 显示refreshState();} else if (mCurrrentState == STATE_PULL_REFRESH) {mHeaderView.setPadding(0, -mHeaderViewHeight, 0, 0);// 隐藏}break;default:break;}return super.onTouchEvent(ev);}/** * 刷新下拉控件的布局 */private void refreshState() {switch (mCurrrentState) {case STATE_PULL_REFRESH:tvTitle.setText("下拉刷新");ivArrow.setVisibility(View.VISIBLE);pbProgress.setVisibility(View.INVISIBLE);ivArrow.startAnimation(animDown);break;case STATE_RELEASE_REFRESH:tvTitle.setText("松开刷新");ivArrow.setVisibility(View.VISIBLE);pbProgress.setVisibility(View.INVISIBLE);ivArrow.startAnimation(animUp);break;case STATE_REFRESHING:tvTitle.setText("正在刷新...");ivArrow.clearAnimation();// 必须先清除动画,才能隐藏ivArrow.setVisibility(View.INVISIBLE);pbProgress.setVisibility(View.VISIBLE);if (mListener != null) {mListener.onRefresh();}break;default:break;}}/** * 初始化箭头动画 */private void initArrowAnim() {// 箭头向上动画animUp = new RotateAnimation(0, -180, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);animUp.setDuration(200);animUp.setFillAfter(true);// 箭头向下动画animDown = new RotateAnimation(-180, 0, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF, 0.5f);animDown.setDuration(200);animDown.setFillAfter(true);}OnRefreshListener mListener;private View mFooterView;private int mFooterViewHeight;public void setOnRefreshListener(OnRefreshListener listener) {mListener = listener;}public interface OnRefreshListener {public void onRefresh();public void onLoadMore();// 加载下一页数据}/* * 收起下拉刷新的控件 */public void onRefreshComplete(boolean success) {if (isLoadingMore) {// 正在加载更多...mFooterView.setPadding(0, -mFooterViewHeight, 0, 0);// 隐藏脚布局isLoadingMore = false;} else {mCurrrentState = STATE_PULL_REFRESH;tvTitle.setText("下拉刷新");ivArrow.setVisibility(View.VISIBLE);pbProgress.setVisibility(View.INVISIBLE);mHeaderView.setPadding(0, -mHeaderViewHeight, 0, 0);// 隐藏if (success) {tvTime.setText("最后刷新时间:" + getCurrentTime());}}}/** * 获取当前时间 */public String getCurrentTime() {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return format.format(new Date());}private boolean isLoadingMore;@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {if (scrollState == SCROLL_STATE_IDLE|| scrollState == SCROLL_STATE_FLING) {if (getLastVisiblePosition() == getCount() - 1 && !isLoadingMore) {// 滑动到最后System.out.println("到底了.....");mFooterView.setPadding(0, 0, 0, 0);// 显示setSelection(getCount() - 1);// 改变listview显示位置isLoadingMore = true;if (mListener != null) {mListener.onLoadMore();}}}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {}OnItemClickListener mItemClickListener;@Overridepublic void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener listener) {super.setOnItemClickListener(this);mItemClickListener = listener;}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {if (mItemClickListener != null) {mItemClickListener.onItemClick(parent, view, position- getHeaderViewsCount(), id);}}}</span>


3.listview点击封装&标记已读

1.重写listview点击事件
<span style="font-size:14px;">OnItemClickListener mItemClickListener;@Overridepublic void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener listener) {super.setOnItemClickListener(this);mItemClickListener = listener;}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {if (mItemClickListener != null) {mItemClickListener.onItemClick(parent, view, position- getHeaderViewsCount(), id);}}</span>
为了postion-2

2.标记为已读,使字体变成灰色
    记下每条新闻的id
PrefUtils为自己写的
<span style="font-size:14px;">lvList.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {System.out.println("被点击:" + position);// 35311,34221,34234,34342// 在本地记录已读状态String ids = PrefUtils.getString(mActivity, "read_ids", "");String readId = mNewsList.get(position).id;if (!ids.contains(readId)) {ids = ids + readId + ",";PrefUtils.setString(mActivity, "read_ids", ids);}// mNewsAdapter.notifyDataSetChanged();changeReadState(view);// 实现局部界面刷新, 这个view就是被点击的item布局对象</span>
刷新listview,在getview中改变
<span style="font-size:14px;">String ids = PrefUtils.getString(mActivity, "read_ids", "");if (ids.contains(getItem(position).id)) {holder.tvTitle.setTextColor(Color.GRAY);} else {holder.tvTitle.setTextColor(Color.BLACK);}</span>

优化:实现局部界面刷新
<span style="font-size:14px;">/** * 改变已读新闻的颜色 */private void changeReadState(View view) {TextView tvTitle = (TextView) view.findViewById(R.id.tv_title);tvTitle.setTextColor(Color.GRAY);}</span>




5.新闻详情页&Webview介绍

1.展示数据为一个网页
2.新建一个Activity
 布局:
<span style="font-size:14px;"><?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" >        <ImageButton            android:id="@+id/btn_back"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:layout_marginLeft="5dp"            android:background="@null"            android:src="@drawable/back" />        <ImageButton            android:id="@+id/btn_share"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:layout_centerVertical="true"            android:layout_marginRight="5dp"            android:background="@null"            android:src="@drawable/icon_share" />        <ImageButton            android:id="@+id/btn_size"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:layout_marginRight="5dp"            android:layout_toLeftOf="@id/btn_share"            android:background="@null"            android:src="@drawable/icon_textsize" />    </RelativeLayout>    <FrameLayout        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1" >        <WebView            android:id="@+id/wv_web"            android:layout_width="match_parent"            android:layout_height="match_parent" />        <ProgressBar            android:id="@+id/pb_progress"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:indeterminateDrawable="@drawable/custom_progress" />    </FrameLayout></LinearLayout></span>

代码下面



7.WebView的拓展

代码见下



8.WebView字体调整

<span style="font-size:14px;">/** * 显示选择对话框 */private void showChooseDialog() {AlertDialog.Builder builder = new AlertDialog.Builder(this);String[] items = new String[] { "超大号字体", "大号字体", "正常字体", "小号字体","超小号字体" };builder.setTitle("字体设置");builder.setSingleChoiceItems(items, mCurrentItem,new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {System.out.println("选中:" + which);mCurrentChooseItem = which;}});builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {WebSettings settings = mWebView.getSettings();switch (mCurrentChooseItem) {case 0:settings.setTextSize(TextSize.LARGEST);break;case 1:settings.setTextSize(TextSize.LARGER);break;case 2:settings.setTextSize(TextSize.NORMAL);break;case 3:settings.setTextSize(TextSize.SMALLER);break;case 4:settings.setTextSize(TextSize.SMALLEST);break;default:break;}mCurrentItem = mCurrentChooseItem;}});builder.setNegativeButton("取消", null);builder.show();}</span>


9.ShareSDK介绍

1.登录官网,注册账号,share sdk ,添加应用
2. 下载,查看对应的文档


10.ShareSDK补充

1.改主题:oks.setTheme(OnekeyShareTheme.SKYBLUE);//设置天蓝色的主题
2.来自于ShareSdk,是因为sharesdk帮我们注册了应用,如果想来自于你的应用,需要到提交审核自己的APP



包括以上的总代码
<span style="font-size:14px;">/** * 新闻详情页 *  * @author Kevin *  */public class NewsDetailActivity extends Activity implements OnClickListener {private WebView mWebView;private ImageButton btnBack;private ImageButton btnSize;private ImageButton btnShare;private ProgressBar pbProgress;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_news_detail);mWebView = (WebView) findViewById(R.id.wv_web);btnBack = (ImageButton) findViewById(R.id.btn_back);btnSize = (ImageButton) findViewById(R.id.btn_size);btnShare = (ImageButton) findViewById(R.id.btn_share);btnBack.setOnClickListener(this);btnSize.setOnClickListener(this);btnShare.setOnClickListener(this);pbProgress = (ProgressBar) findViewById(R.id.pb_progress);String url = getIntent().getStringExtra("url");WebSettings settings = mWebView.getSettings(); //设置WebView设置settings.setJavaScriptEnabled(true);// 表示支持js    可以有下一页settings.setBuiltInZoomControls(true);// 显示放大缩小按钮settings.setUseWideViewPort(true);// 支持双击缩放mWebView.setWebViewClient(new WebViewClient() {     //回调方式/** * 网页开始加载 */@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);System.out.println("网页开始加载");pbProgress.setVisibility(View.VISIBLE);}/** * 网页加载结束 */@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);System.out.println("网页开始结束");pbProgress.setVisibility(View.GONE);}/** * 所有跳转的链接都会在此方法中回调,回调的URl都在WebView中加载 */@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {// tel:110System.out.println("跳转url:" + url);view.loadUrl(url);return true;// return super.shouldOverrideUrlLoading(view, url);}});// mWebView.goBack()mWebView.setWebChromeClient(new WebChromeClient() {    //进度监听/** * 进度发生变化 */@Overridepublic void onProgressChanged(WebView view, int newProgress) {System.out.println("加载进度:" + newProgress);super.onProgressChanged(view, newProgress);}/** * 获取网页标题 */@Overridepublic void onReceivedTitle(WebView view, String title) {System.out.println("网页标题:" + title);super.onReceivedTitle(view, title);}});mWebView.loadUrl(url);// 加载网页}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_back:finish();break;case R.id.btn_size:showChooseDialog();break;case R.id.btn_share:showShare();break;default:break;}}private int mCurrentChooseItem;// 记录当前选中的item, 点击确定前private int mCurrentItem = 2;// 记录当前选中的item, 点击确定后/** * 显示选择对话框 */private void showChooseDialog() {AlertDialog.Builder builder = new AlertDialog.Builder(this);String[] items = new String[] { "超大号字体", "大号字体", "正常字体", "小号字体","超小号字体" };builder.setTitle("字体设置");builder.setSingleChoiceItems(items, mCurrentItem,new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {System.out.println("选中:" + which);mCurrentChooseItem = which;}});builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {WebSettings settings = mWebView.getSettings();switch (mCurrentChooseItem) {case 0:settings.setTextSize(TextSize.LARGEST);break;case 1:settings.setTextSize(TextSize.LARGER);break;case 2:settings.setTextSize(TextSize.NORMAL);break;case 3:settings.setTextSize(TextSize.SMALLER);break;case 4:settings.setTextSize(TextSize.SMALLEST);break;default:break;}mCurrentItem = mCurrentChooseItem;}});builder.setNegativeButton("取消", null);builder.show();}/** * 分享, 注意在sdcard根目录放test.jpg */private void showShare() {ShareSDK.initSDK(this);OnekeyShare oks = new OnekeyShare();oks.setTheme(OnekeyShareTheme.SKYBLUE);//设置天蓝色的主题// 关闭sso授权oks.disableSSOWhenAuthorize();// 分享时Notification的图标和文字oks.setNotification(R.drawable.ic_launcher,getString(R.string.app_name));// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用oks.setTitle(getString(R.string.share));// titleUrl是标题的网络链接,仅在人人网和QQ空间使用oks.setTitleUrl("http://sharesdk.cn");// text是分享文本,所有平台都需要这个字段oks.setText("我是分享文本");// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数oks.setImagePath("/sdcard/test.jpg");// 确保SDcard下面存在此张图片// url仅在微信(包括好友和朋友圈)中使用oks.setUrl("http://sharesdk.cn");// comment是我对这条分享的评论,仅在人人网和QQ空间使用oks.setComment("我是测试评论文本");// site是分享此内容的网站名称,仅在QQ空间使用oks.setSite(getString(R.string.app_name));// siteUrl是分享此内容的网站地址,仅在QQ空间使用oks.setSiteUrl("http://sharesdk.cn");// 启动分享GUIoks.show(this);}}</span>



11.缓存介绍

1.以URl为Key,Json内容为Value,进行缓存
2.SharePreference封装成一个工具类
/** * SharePreference封装 *  * @author Kevin *  */public class PrefUtils {public static final String PREF_NAME = "config";public static boolean getBoolean(Context ctx, String key,boolean defaultValue) {SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,Context.MODE_PRIVATE);return sp.getBoolean(key, defaultValue);}public static void setBoolean(Context ctx, String key, boolean value) {SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,Context.MODE_PRIVATE);sp.edit().putBoolean(key, value).commit();}public static String getString(Context ctx, String key, String defaultValue) {SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,Context.MODE_PRIVATE);return sp.getString(key, defaultValue);}public static void setString(Context ctx, String key, String value) {SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,Context.MODE_PRIVATE);sp.edit().putString(key, value).commit();}}

3.缓存工具类
/** * 缓存工具类 *  * @author Kevin *  */public class CacheUtils {/** * 设置缓存 key 是url, value是json */public static void setCache(String key, String value, Context ctx) {PrefUtils.setString(ctx, key, value);//可以将缓存放在文件中, 文件名就是Md5(url), 文件内容是json}/** * 获取缓存 key 是url */public static String getCache(String key, Context ctx) {return PrefUtils.getString(ctx, key, null);}}

4.进行缓存
String cache = CacheUtils.getCache(GlobalContants.CATEGORIES_URL,mActivity);if (!TextUtils.isEmpty(cache)) {// 如果缓存存在,直接解析数据, 无需访问网路parseData(cache);}getDataFromServer();// 不管有没有缓存, 都获取最新数据, 保证数据最新

// 设置缓存CacheUtils.setCache(mUrl, result, mActivity);
每个访问服务器的都要设置缓存

5. 可以将缓存放在文件中, 文件名就是Md5(url), 文件内容是json



12.自动轮播条

1、BitmapUtil帮我们进行缓存了图片
2.   使用handle
// 自动轮播条显示if (mHandler == null) {mHandler = new Handler() {public void handleMessage(android.os.Message msg) {int currentItem = mViewPager.getCurrentItem();if (currentItem < mTopNewsList.size() - 1) {currentItem++;} else {currentItem = 0;}mViewPager.setCurrentItem(currentItem);// 切换到下一个页面mHandler.sendEmptyMessageDelayed(0, 3000);// 继续延时3秒发消息,// 形成循环};};mHandler.sendEmptyMessageDelayed(0, 3000);// 延时3秒后发消息}} else {// 如果是加载下一页,需要将数据追加给原来的集合ArrayList<TabNewsData> news = mTabDetailData.data.news;mNewsList.addAll(news);mNewsAdapter.notifyDataSetChanged();}


13.轮播条触摸监听

1.按住ViewPager停住
/** * 头条新闻的触摸监听 *  * @author Kevin *  */class TopNewsTouchListener implements OnTouchListener {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:System.out.println("按下");mHandler.removeCallbacksAndMessages(null);// 删除Handler中的所有消息// mHandler.postDelayed(new Runnable() {//// @Override// public void run() {//// }// }, 3000);break;case MotionEvent.ACTION_CANCEL:System.out.println("事件取消");mHandler.sendEmptyMessageDelayed(0, 3000);break;case MotionEvent.ACTION_UP:System.out.println("抬起");mHandler.sendEmptyMessageDelayed(0, 3000);break;default:break;}return true;}}

14.组图模块开发

1.可以切换listview和gridview
2.布局
<?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" >    <ListView        android:id="@+id/lv_photo"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:cacheColorHint="#fff"        android:divider="@null" />    <GridView        android:id="@+id/gv_photo"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:numColumns="2"        android:visibility="gone" /></FrameLayout>

2.获取服务器数据和上面一样
/** * 菜单详情页-组图 *  * @author Kevin *  */public class PhotoMenuDetailPager extends BaseMenuDetailPager {private ListView lvPhoto;private GridView gvPhoto;private ArrayList<PhotoInfo> mPhotoList;private PhotoAdapter mAdapter;private ImageButton btnPhoto;public PhotoMenuDetailPager(Activity activity, ImageButton btnPhoto) {super(activity);this.btnPhoto = btnPhoto;btnPhoto.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {changeDisplay();}});}@Overridepublic View initViews() {View view = View.inflate(mActivity, R.layout.menu_photo_pager, null);lvPhoto = (ListView) view.findViewById(R.id.lv_photo);gvPhoto = (GridView) view.findViewById(R.id.gv_photo);return view;}@Overridepublic void initData() {String cache = CacheUtils.getCache(GlobalContants.PHOTOS_URL, mActivity);if (!TextUtils.isEmpty(cache)) {}getDataFromServer();}private void getDataFromServer() {HttpUtils utils = new HttpUtils();utils.send(HttpMethod.GET, GlobalContants.PHOTOS_URL,new RequestCallBack<String>() {@Overridepublic void onSuccess(ResponseInfo<String> responseInfo) {String result = (String) responseInfo.result;parseData(result);// 设置缓存CacheUtils.setCache(GlobalContants.PHOTOS_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 = new Gson();PhotosData data = gson.fromJson(result, PhotosData.class);mPhotoList = data.data.news;// 获取组图列表集合if (mPhotoList != null) {mAdapter = new PhotoAdapter();lvPhoto.setAdapter(mAdapter);gvPhoto.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() {return mPhotoList.size();}@Overridepublic PhotoInfo getItem(int position) {return mPhotoList.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_photo_item,null);holder = new ViewHolder();holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title);holder.ivPic = (ImageView) convertView.findViewById(R.id.iv_pic);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}PhotoInfo item = getItem(position);holder.tvTitle.setText(item.title);utils.display(holder.ivPic, item.listimage);return convertView;}}static class ViewHolder {public TextView tvTitle;public ImageView ivPic;}private boolean isListDisplay = true;// 是否是列表展示/** * 切换展现方式 */private void changeDisplay() {if (isListDisplay) {isListDisplay = false;lvPhoto.setVisibility(View.GONE);gvPhoto.setVisibility(View.VISIBLE);btnPhoto.setImageResource(R.drawable.icon_pic_list_type);} else {isListDisplay = true;lvPhoto.setVisibility(View.VISIBLE);gvPhoto.setVisibility(View.GONE);btnPhoto.setImageResource(R.drawable.icon_pic_grid_type);}}}


0 0
原创粉丝点击