package com.atguigu.beijingnews.detailpager; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.text.TextUtils; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.atguigu.baselibrary.CacheUtils; import com.atguigu.baselibrary.Constants; import com.atguigu.baselibrary.DensityUtil; import com.atguigu.beijingnews.R; import com.atguigu.beijingnews.activity.NewsDetailActivity; import com.atguigu.beijingnews.adapter.TabDetailPagerAdapter; import com.atguigu.beijingnews.base.MenuDetailBasePager; import com.atguigu.beijingnews.bean.NewsCenterBean; import com.atguigu.beijingnews.bean.TabDetailPagerBean; import com.atguigu.beijingnews.view.HorizontalScrollViewPager; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.handmark.pulltorefresh.library.extras.SoundPullEventListener; import org.xutils.common.Callback; import org.xutils.http.RequestParams; import org.xutils.x; import java.util.List; import butterknife.ButterKnife; import butterknife.InjectView; /** * 作者:尚硅谷-杨光福 on 2017/2/6 15:26 * 微信:yangguangfu520 * QQ号:541433511 * 作用:xxxx */ public class TabDetailPager extends MenuDetailBasePager { public static final String ID_ARRAY = "id_array"; private final NewsCenterBean.DataBean.ChildrenBean childrenBean; @InjectView(R.id.pull_refresh_list) PullToRefreshListView refreshListView; ListView listview; HorizontalScrollViewPager viewpager; TextView tvTitle; LinearLayout llGroupPoint; private String url; private TabDetailPagerAdapter adapter; private int prePosition; /** * 列表数据 */ private List<TabDetailPagerBean.DataEntity.NewsEntity> news; /** * 顶部轮播图的数据 */ private List<TabDetailPagerBean.DataEntity.TopnewsEntity> topnews; /** * 更多的路径 */ private String moreUrl; /** * 是否加载更多 */ private boolean isLoadMore = false; public TabDetailPager(Context context, NewsCenterBean.DataBean.ChildrenBean childrenBean) { super(context); this.childrenBean = childrenBean; } @Override public View initView() { //图组详情页面的视图 View view = View.inflate(mContext, R.layout.tab_detail_pager, null); ButterKnife.inject(this, view);//ListView就被实例化了-->PullToRefreshListView被初始化了 listview = refreshListView.getRefreshableView(); // Button button =new Button(mContext); // button.setText("我是头部的按钮哦"); View headerView = View.inflate(mContext, R.layout.header_view, null); viewpager = (HorizontalScrollViewPager) headerView.findViewById(R.id.viewpager); tvTitle = (TextView) headerView.findViewById(R.id.tv_title); llGroupPoint = (LinearLayout) headerView.findViewById(R.id.ll_group_point); listview.addHeaderView(headerView); SoundPullEventListener<ListView> soundListener = new SoundPullEventListener<ListView>(mContext); soundListener.addSoundEvent(PullToRefreshBase.State.PULL_TO_REFRESH, R.raw.pull_event); soundListener.addSoundEvent(PullToRefreshBase.State.RESET, R.raw.reset_sound); soundListener.addSoundEvent(PullToRefreshBase.State.REFRESHING, R.raw.refreshing_sound); refreshListView.setOnPullEventListener(soundListener); //设置下拉和上拉刷新 refreshListView.setOnRefreshListener(new MyOnRefreshListener2()); //设置ListView的item的点击事件 listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //得到Bean对象 TabDetailPagerBean.DataEntity.NewsEntity newsEntity = news.get(position-2); String title = newsEntity.getTitle(); int ids = newsEntity.getId(); Log.e("TAG","tilet=="+title+",id=="+ids); //1.获取是否已经存在,如果不存在才保存 String idArray = CacheUtils.getString(mContext, ID_ARRAY);//""-->1111, //如果不包含才保存 if(!idArray.contains(ids+"")){ //保存点击过的item的对应的id CacheUtils.putString(mContext,ID_ARRAY,idArray+ids+","); adapter.notifyDataSetChanged();//getCount-->getView //2.刷新适配器 } //跳转到新闻的浏览页面 Intent intent = new Intent(mContext,NewsDetailActivity.class); intent.putExtra("url",Constants.BASE_URL+newsEntity.getUrl()); mContext.startActivity(intent); } }); return view; } class MyOnRefreshListener2 implements PullToRefreshBase.OnRefreshListener2<ListView> { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { //Toast.makeText(mContext, "下拉刷新", Toast.LENGTH_SHORT).show(); isLoadMore = false; getDataFromNet(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { // Toast.makeText(mContext, "上拉刷新", Toast.LENGTH_SHORT).show(); if(!TextUtils.isEmpty(moreUrl)){ isLoadMore = true; getMoreDataFromNet(); }else{ Toast.makeText(mContext, "没有更多数据了", Toast.LENGTH_SHORT).show(); refreshListView.onRefreshComplete(); } } } /** * 请求更多数据 */ private void getMoreDataFromNet() { RequestParams params = new RequestParams(moreUrl); x.http().get(params, new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { Log.e("TAG", "请求更多数据成功==TabDetailPager==" + childrenBean.getTitle()); processData(result); //把下拉刷新和上拉刷新隐藏 refreshListView.onRefreshComplete(); } @Override public void onError(Throwable ex, boolean isOnCallback) { Log.e("TAG", "请求更多数据失败==TabDetailPager==" + ex.getMessage()); } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); } @Override public void initData() { super.initData(); url = Constants.BASE_URL + childrenBean.getUrl(); Log.e("TAG", "TabDetailPager--url==" + url); String saveJson = CacheUtils.getString(mContext,url); if(!TextUtils.isEmpty(saveJson)){ processData(saveJson); } //设置数据 getDataFromNet(); } private void getDataFromNet() { RequestParams params = new RequestParams(url); x.http().get(params, new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { Log.e("TAG", "请求数据成功==TabDetailPager==" + childrenBean.getTitle()); CacheUtils.putString(mContext,url,result); processData(result); //把下拉刷新和上拉刷新隐藏 refreshListView.onRefreshComplete(); } @Override public void onError(Throwable ex, boolean isOnCallback) { Log.e("TAG", "请求数据失败==TabDetailPager==" + ex.getMessage()); } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); } private InternalHandler handler; private void processData(String json) { TabDetailPagerBean pagerBean = new Gson().fromJson(json, TabDetailPagerBean.class); String more = pagerBean.getData().getMore(); if(TextUtils.isEmpty(more)){ moreUrl = ""; }else{ moreUrl = Constants.BASE_URL + more; } if(!isLoadMore){ //原来的代码 news = pagerBean.getData().getNews(); //设置适配器 adapter = new TabDetailPagerAdapter(mContext, news); listview.setAdapter(adapter); //设置顶部新闻(轮播图) //设置Viewpager的适配器 topnews = pagerBean.getData().getTopnews(); viewpager.setAdapter(new MyPagerAdapter()); //监听ViewPager页面的变化 viewpager.addOnPageChangeListener(new MyOnPageChangeListener()); tvTitle.setText(topnews.get(prePosition).getTitle()); //把之前所有的移除 llGroupPoint.removeAllViews(); //添加红点 for (int i = 0; i < topnews.size(); i++) { //添加到线性布局 ImageView point = new ImageView(mContext); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(-2, ViewGroup.LayoutParams.WRAP_CONTENT); if(i!= 0){ //设置距离左边的距离 params.leftMargin = DensityUtil.dip2px(mContext,8); point.setEnabled(false); }else{ point.setEnabled(true); } point.setLayoutParams(params); //设置图片背景选择器 point.setBackgroundResource(R.drawable.point_selector); llGroupPoint.addView(point); } }else{ isLoadMore = false; //更多 news.addAll(pagerBean.getData().getNews()); adapter.notifyDataSetChanged(); } //顶部轮播图动态切换 if(handler ==null){ handler = new InternalHandler(); } //把之前所有消息和任务移除 handler.removeCallbacksAndMessages(null); handler.postDelayed(new MyRunnable(),3000); } class InternalHandler extends Handler{ @Override public void handleMessage(Message msg) { super.handleMessage(msg); //切换到下个页面 int item = (viewpager.getCurrentItem()+1)%topnews.size(); viewpager.setCurrentItem(item); handler.postDelayed(new MyRunnable(),3000); } } class MyRunnable implements Runnable{ @Override public void run() { handler.sendEmptyMessage(0); } } class MyOnPageChangeListener implements ViewPager.OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { //先把之前的变灰 llGroupPoint.getChildAt(prePosition).setEnabled(false); //把当前变高亮 llGroupPoint.getChildAt(position).setEnabled(true); prePosition = position; } @Override public void onPageSelected(int position) { tvTitle.setText(topnews.get(position).getTitle()); } @Override public void onPageScrollStateChanged(int state) { if(state==ViewPager.SCROLL_STATE_DRAGGING){ handler.removeCallbacksAndMessages(null); }else if(state==ViewPager.SCROLL_STATE_IDLE){ handler.removeCallbacksAndMessages(null); handler.postDelayed(new MyRunnable(),3000); } } } class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return topnews.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = new ImageView(mContext); imageView.setScaleType(ImageView.ScaleType.FIT_XY); //设置默认的和联网请求 final TabDetailPagerBean.DataEntity.TopnewsEntity topnewsEntity = topnews.get(position); //加载图片 Glide.with(mContext).load(Constants.BASE_URL + topnewsEntity.getTopimage()) .diskCacheStrategy(DiskCacheStrategy.ALL) //设置默认图片 .placeholder(R.drawable.news_pic_default) //请求图片失败 .error(R.drawable.news_pic_default) .into(imageView); //添加到ViewPager和返回 container.addView(imageView); //设置触摸事件 imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN://按下 handler.removeCallbacksAndMessages(null); break; case MotionEvent.ACTION_UP://离开 handler.postDelayed(new MyRunnable(),3000); break; } return false; } }); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //跳转到新闻的浏览页面 Intent intent = new Intent(mContext,NewsDetailActivity.class); intent.putExtra("url",Constants.BASE_URL+topnewsEntity.getUrl()); mContext.startActivity(intent); } }); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } }