177.n1-banner的监听

来源:互联网 发布:gfxbench数据库 编辑:程序博客网 时间:2024/06/05 01:14

banner的监听只需要添加点击事件

//监听image的点击事件image.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event) {switch(event.getAction()){case MotionEvent.ACTION_DOWN://清除所有的消息和回掉mHandler.removeCallbacksAndMessages(null);/*//主线程巡行mHandler.post(new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stub}});*/break;//按键的时候移动到其他地方并抬起,取消按键case MotionEvent.ACTION_CANCEL:mHandler.sendEmptyMessageDelayed(0, 3000);break;case MotionEvent.ACTION_UP:mHandler.sendEmptyMessageDelayed(0, 3000);break;default:break;}return true;}});
TabDetailPager.java  
package com.ldw.beijing.base;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.graphics.Color;import android.os.Handler;import android.os.Message;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.text.TextUtils;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ImageView.ScaleType;import android.widget.TextView;import android.widget.Toast;import com.google.gson.Gson;import com.ldw.beijing.NewDetailActivity;import com.ldw.beijing.R;import com.ldw.beijing.domain.NewsData.NewsTabData;import com.ldw.beijing.domain.TabData;import com.ldw.beijing.domain.TabData.TabNewsData;import com.ldw.beijing.domain.TabData.TopNewsData;import com.ldw.beijing.global.ClobalContants;import com.ldw.beijing.utils.CacheUtils;import com.ldw.beijing.utils.PreferencesUtils;import com.ldw.beijing.view.RefreshListView;import com.ldw.beijing.view.RefreshListView.OnRefreshListener;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;import com.viewpagerindicator.CirclePageIndicator;/* * 左边菜单栏右边详情页,最上面对应的tab,页签 */public class TabDetailPager extends BaseMenuDetailPager implements OnPageChangeListener{//携带数据详情的数据private NewsTabData mTabData;private TextView text;private String mUrl;private TabData mTabDetailData;@ViewInject(R.id.vp_news)private ViewPager mViewPager;@ViewInject(R.id.tv_title)private TextView tv_title;//banner的标题@ViewInject(R.id.indicator)private CirclePageIndicator indicator;//banner下面的小圆点@ViewInject(R.id.lv_list)private RefreshListView lv_list;//新闻列表private ArrayList<TopNewsData> mTopNewsList;//banner的数据private ArrayList<TabNewsData> mNewsList;private String mMoreUrl;//加载更多的链接地址private NewsAdapter mNewsAdapter;private Handler mHandler;public TabDetailPager(Activity activity, NewsTabData newsTabData) {super(activity);mTabData = newsTabData;//图片的地址mUrl = ClobalContants.SERVER_URL + mTabData.url;}@Overridepublic View initView() {View view = View.inflate(mActivity, R.layout.tab_detail_pager, null);//把banner添加到ListView的头部,实现二者的组合View headView = View.inflate(mActivity, R.layout.list_header_topnews, null);ViewUtils.inject(this, view);ViewUtils.inject(this, headView);//添加到ListView的头部lv_list.addHeaderView(headView);//监听下拉刷新,调用自定义布局中的接口lv_list.setOnRefreshListener(new OnRefreshListener(){@Overridepublic void onRefresh() {//读取数据getDataFromServer();//结束刷新lv_list.onRefreshComplete(true);}@Overridepublic void onLoadMore() {if(mMoreUrl != null){getMoreDataFromServer();}else{Toast.makeText(mActivity, "最后一条了", Toast.LENGTH_SHORT).show();//隐藏脚部局lv_list.onRefreshComplete(false);}}});//将读取过的数据保存给lv_list添加点击事件,监听点击,在RefreshListView中进行了封装返回了position-2lv_list.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {System.out.println("点击:"+ position);//获取到保存的read_ids对象String ids = PreferencesUtils.getString(mActivity, "read_ids", "");String readId =mNewsList.get(position).id;//不包含在PreferencesUtils中添加记录中if(!ids.contains(readId)){//将读取到点击的id保存,同时在后面添加一个","ids = ids + readId + ",";//保存数据PreferencesUtils.setString(mActivity, "read_ids", ids);}//刷新UI来修改文本的颜色,方法耗内存会全局刷新,使用changeReadState//mNewsAdapter.notifyDataSetChanged();changeReadState(view);//局部界面刷新,针对点击的view刷新//点击新闻跳转到新闻的详情页Intent intent = new Intent();intent.setClass(mActivity, NewDetailActivity.class);intent.putExtra("url", mNewsList.get(position).url);mActivity.startActivity(intent);//mActivity.startActivity(new Intent(mActivity, NewDetailActivity.class));}});//监听Viewager的滑动//mViewPager.setOnPageChangeListener(this);// 向FrameLayout中动态添加布局return view;}/* * 修改已读新闻的颜色 */private void changeReadState(View view){TextView tv_title = (TextView) view.findViewById(R.id.tv_title);tv_title.setTextColor(Color.GRAY);}@Overridepublic void initData(){//读取缓存,String cache = CacheUtils.getCache(mUrl, mActivity);if(!TextUtils.isEmpty(cache)){//缓存存在,直接解析数据,不需要从服务器读取parseData(cache, false);}//从服务器更新数据getDataFromServer();}/* * 获取网络数据 */private void getDataFromServer() {//从服务器中获取数据HttpUtils utils = new HttpUtils();utils.send(HttpMethod.GET, mUrl, new RequestCallBack<String>(){@Overridepublic void onSuccess(ResponseInfo<String> responseInfo) {//获取到返回的结果String result = (String) responseInfo.result;System.out.println("tab详情返回结果:" + result);parseData(result, false);//隐藏布局lv_list.onRefreshComplete(true);//设置缓存CacheUtils.setCache(mUrl, result, mActivity);}@Overridepublic void onFailure(HttpException error, String msg) {Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT).show();//打印错误信息error.printStackTrace();}});}/* * 获取更多网络数据 */private void getMoreDataFromServer() {//从服务器中获取数据HttpUtils utils = new HttpUtils();utils.send(HttpMethod.GET, mMoreUrl, new RequestCallBack<String>(){@Overridepublic void onSuccess(ResponseInfo<String> responseInfo) {//获取到返回的结果String result = (String) responseInfo.result;System.out.println("tab详情返回结果:" + result);parseData(result, true);}@Overridepublic void onFailure(HttpException error, String msg) {Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT).show();//打印错误信息error.printStackTrace();}});}/* * 解析网络数据,第二个参数表示是否加载下一页 */protected void parseData(String result,boolean isMore) {//使用Gson解析Gson gson = new Gson();mTabDetailData = gson.fromJson(result, TabData.class);System.out.println("解析结果:" + mTabDetailData);//服务器读取加载更多数据String more = mTabDetailData.data.more;if(!TextUtils.isEmpty(more)){mMoreUrl = ClobalContants.SERVER_URL + more;}else{mMoreUrl = null;}//不加载更多if(!isMore){//新闻列表的数据ListViewmNewsList = mTabDetailData.data.news;//取到banner新闻top的数据mTopNewsList = mTabDetailData.data.topnews;//top新闻填充if(mTopNewsList != null){//填充top新闻的pagremViewPager.setAdapter(new TopNewsAdapter());//banner下面的小圆点,需要在adapter初始化以后才能显示indicator.setViewPager(mViewPager);indicator.setSnap(true);//支持快照显示indicator.setOnPageChangeListener(this);//添加监听,修改文本内容indicator.onPageSelected(0);//默认选择第一个,防止图片和远点不对应//解析数据的时候初始化标题tv_title.setText(mTopNewsList.get(0).title);}//填充新闻列表if(mNewsList != null){mNewsAdapter = new NewsAdapter();lv_list.setAdapter(mNewsAdapter);}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);//在handleMessage中延时发送消息实现定时刷新,实现循环mHandler.sendMessageDelayed(Message.obtain(), 3000);};};//延时发送消息实现定时刷新mHandler.sendMessageDelayed(Message.obtain(), 3000);}}else{//是加载下一页,需要吧数据追加到原来的集合ArrayList<TabNewsData> news = mTabDetailData.data.news;mNewsList.addAll(news);//数据发生改变mNewsAdapter.notifyDataSetChanged();}}/* * 头条新闻,banner */class TopNewsAdapter extends PagerAdapter{private BitmapUtils utils;//构造函数public TopNewsAdapter(){utils = new BitmapUtils(mActivity);//加载数据过程中,设置默认加载的图片utils.configDefaultLoadingImage(R.drawable.topnews_item_default);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mTabDetailData.data.topnews.size();}@Overridepublic boolean isViewFromObject(View view, Object object) {// TODO Auto-generated method stubreturn view == object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {//初始化banner图ImageView image = new ImageView(mActivity);//填充布局对象//image.setImageResource(R.drawable.topnews_item_default);//填充平铺布局,基于控件的大小image.setScaleType(ScaleType.FIT_XY);//获取到图片资源的数据的地址TopNewsData topNewsData = mTabDetailData.data.topnews.get(position);utils.display(image, topNewsData.topimage);//添加image数据container.addView(image);//监听image的点击事件image.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event) {switch(event.getAction()){case MotionEvent.ACTION_DOWN://清除所有的消息和回掉mHandler.removeCallbacksAndMessages(null);/*//主线程巡行mHandler.post(new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stub}});*/break;//按键的时候移动到其他地方并抬起,取消按键case MotionEvent.ACTION_CANCEL:mHandler.sendEmptyMessageDelayed(0, 3000);break;case MotionEvent.ACTION_UP:mHandler.sendEmptyMessageDelayed(0, 3000);break;default:break;}return true;}});return image;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}}//新闻列表的适配器class NewsAdapter extends BaseAdapter{private BitmapUtils utils;//构造函数初始化图片public NewsAdapter(){utils = new BitmapUtils(mActivity);//加载的时候显示默认图片utils.configDefaultLoadingImage(R.drawable.pic_item_list_default);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mNewsList.size();}@Overridepublic TabNewsData getItem(int position) {// TODO Auto-generated method stubreturn mNewsList.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_news_item, null);holder = new ViewHolder();holder.iv_pic = (ImageView) convertView.findViewById(R.id.iv_pic);holder.tv_date = (TextView) convertView.findViewById(R.id.tv_date);holder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}TabNewsData item = (TabNewsData) getItem(position);holder.tv_title.setText(item.title);holder.tv_date.setText(item.pupdate);utils.display(holder.iv_pic, item.listimage);//读取保存的ids,将读取过的listView颜色修改String ids = PreferencesUtils.getString(mActivity, "read_ids", "");if(ids.contains(getItem(position).id)){holder.tv_title.setTextColor(Color.GRAY);}return convertView;}}static class ViewHolder{public TextView tv_title;public TextView tv_date;public ImageView iv_pic;}@Overridepublic void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {// TODO Auto-generated method stub}//滑动的监听,当页面被选中的时候更新标题@Overridepublic void onPageSelected(int position) {//TopNewsData topNewsData= mTabDetailData.data.topnews.get(position);tv_title.setText(mTopNewsList.get(position).title);}@Overridepublic void onPageScrollStateChanged(int state) {// TODO Auto-generated method stub}}