package com.bwei.tab; import android.Manifest; import android.os.Build; import android.os.Handler; import android.os.Message; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.AbsListView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.Toast; import com.bwei.adapter.BannerAdapter; import com.bwei.adapter.NewsListAdapter; import com.bwei.base.BaseTabFragment; import com.bwei.bean.UIBannerBean; import com.bwei.bean.UINewsBean; import com.bwei.dao.NewsDao; import com.bwei.db.NewsBean; import com.bwei.headline.MainActivity; import com.bwei.headline.R; import com.bwei.net.NetUtils; import com.bwei.util.HttpUtils; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; import java.util.HashSet; import java.util.List; /** * Created by 曲学超 on 2018/7/25. */ public class TabFragment1 extends BaseTabFragment implements HttpUtils.NetCallback{ private PullToRefreshListView pull_to_refresh_list_view; private String url = "http://ttpc.dftoutiao.com/jsonpc/refresh?type="; private String bannerUrl = "http://www.xieast.com/api/banner.php"; private int type = 5010; private ArrayList<UINewsBean.DataBean> dataBeanList; private NewsListAdapter newsListAdapter; private NewsDao newsDao; private HttpUtils httpUtils; private int page = 1; private ViewPager view_pager; private LinearLayout llPonits; private List<ImageView> bannerImages; private ArrayList<ImageView> ponits; private BannerCallback bannerCallback; private static final int CODE_BANNER = 1; private static final long DELAY = 1000; @Override protected int getLayoutId() { return R.layout.fragment_tab1; } @Override protected void initView(View view) { // 动态申请权限 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},200); } // 初始化 pull_to_refresh_list_view = view.findViewById(R.id.pull_to_refresh_list_view); pull_to_refresh_list_view.setMode(PullToRefreshBase.Mode.BOTH); pull_to_refresh_list_view.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { type = 5010; loadData(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { type ++; loadData(); } }); // 展示一个空的List dataBeanList = new ArrayList<>(); newsListAdapter = new NewsListAdapter(getActivity(),dataBeanList); pull_to_refresh_list_view.setAdapter(newsListAdapter); // 请求数据并在ListView中展示 // 先从数据库中读取, 数据库中有直接展示 没有判断网络是否连接 连接请求网络数据 没有连接提示提示用户没有网络 newsDao = new NewsDao(getActivity()); httpUtils = HttpUtils.getInstance(); // 获取数据 loadData(); // 轮播 操作 bannerOperator(); } private void bannerOperator() { // 给PullToRefresh添加头布局 ListView refreshableView = pull_to_refresh_list_view.getRefreshableView(); View bannerView = LayoutInflater.from(getActivity()).inflate(R.layout.banner_layout, null, false); // 查找轮播视图 view_pager = bannerView.findViewById(R.id.view_pager); llPonits = bannerView.findViewById(R.id.ll_points); bannerImages = new ArrayList<>(); ponits = new ArrayList<>(); // 设置头布局的布局参数 AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 400); bannerView.setLayoutParams(params); // 添加头布局 refreshableView.addHeaderView(bannerView); // 请求轮播 bannerCallback = new BannerCallback(); httpUtils.getDataFromServer(bannerUrl, bannerCallback); } class BannerCallback implements HttpUtils.NetCallback{ @Override public void onSuccess(String result) { Log.i("xxx", "轮播:" + result); Gson gson = new Gson(); UIBannerBean uiBannerBean = gson.fromJson(result, UIBannerBean.class); for (UIBannerBean.DataBean dataBean : uiBannerBean.getData()) { // 添加图片 ImageView imageView = new ImageView(getActivity()); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ImageLoader.getInstance().displayImage(dataBean.getImg(), imageView); bannerImages.add(imageView); // 添加小圆点 ImageView point = new ImageView(getActivity()); point.setImageResource(R.drawable.point_normal); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 20); params.leftMargin = 10; llPonits.addView(point, params); ponits.add(point); } // 设置Adapter view_pager.setAdapter(new BannerAdapter(bannerImages)); changePonintState(0); mHandler.sendEmptyMessageDelayed(CODE_BANNER, DELAY); } @Override public void onError(String errorMsg) { } } private void changePonintState(int i) { for (int j = 0; j < ponits.size(); j++) { if (i == j) { ponits.get(j).setImageResource(R.drawable.point_selector); } else { ponits.get(j).setImageResource(R.drawable.point_normal); } } } // 轮播 private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case CODE_BANNER: int currentItem = view_pager.getCurrentItem(); currentItem++; view_pager.setCurrentItem(currentItem); changePonintState(currentItem % ponits.size()); sendEmptyMessageDelayed(CODE_BANNER, DELAY); break; } } }; private void loadData() { NewsBean load = newsDao.load(url + type); if (load != null){ // 读取json showData(load.json); } else { // 判断网络 if(NetUtils.isNetConntec(getActivity())){ // 请求网络 httpUtils.getDataFromServer(url + type , this); } else { // 没有网络 Toast.makeText(getActivity(),"请连接网络",Toast.LENGTH_SHORT).show(); } } } @Override protected void getServer() { } @Override public void onSuccess(String result) { Log.i("aaa", result); // 数据包含null() 需要做字符串的替换 String json = result.replace("null(", "").replace(")", ""); Log.i("aaa", json); // 存储到数据库 newsDao.replace(new NewsBean(url + type, json)); // 展示 showData(json); } private void showData(String json) { Gson gson = new Gson(); UINewsBean uiNewsBean = gson.fromJson(json, UINewsBean.class); /* 第一页数据 清空List */ if (type == 5010) { dataBeanList.clear(); } dataBeanList.addAll(uiNewsBean.getData()); // 使用HashSet去除重复 HashSet hashSet = new HashSet(dataBeanList); dataBeanList.clear(); dataBeanList.addAll(hashSet); // 刷新Adapter newsListAdapter.notifyDataSetChanged(); // 停止刷新, 如果读取本地数据库 可能时间太快 停止不了刷新,所以延时1秒钟停止刷新 pull_to_refresh_list_view.postDelayed(new Runnable() { @Override public void run() { pull_to_refresh_list_view.onRefreshComplete(); } }, 1000); } @Override public void onError(String errorMsg) { } }
tab1
最新推荐文章于 2022-08-08 09:45:00 发布