json进行缓存+ViewPager+onRefresh+XlistView

public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener {

    private Handler handler = new Handler() {

        private MyViewPager viewPager;

        @Override
        public void handleMessage(Message msg) {

            switch (msg.what) {

                case 0:
                    subjects = (List<BeiJingBean.SubjectsBean>) msg.obj;
                    adapter = new MyAdapter();
                    lv.setAdapter(adapter);
                    viewPager = new MyViewPager();
                    vp.setAdapter(viewPager);
                    vp.setCurrentItem(10000);
                    initDot();
                    lv.addHeaderView(vp);

                    break;
                case 1:
                    String json = (String) msg.obj;
                    //Toast.makeText(MainActivity.this,json,Toast.LENGTH_LONG).show();
                    adapter.notifyDataSetChanged();
                    viewPager.notifyDataSetChanged();
                    lv.stopRefresh();
                    break;

                case 2:
                    int currentItem = vp.getCurrentItem();
                    currentItem++;
                    vp.setCurrentItem(currentItem);
                    sendMsg();
                    break;

            }


        }
    };

    private MyAdapter adapter;
    private DisplayImageOptions options;
    private SharedPreferences sp;
    private List<BeiJingBean.SubjectsBean> subjects;
    private List<BeiJingBean.SubjectsBean.CastsBean> casts;
    private XListView lv;
    private int pager = 1;
    private ViewPager vp;
    private LinearLayout ll;
    private List<BeiJingBean.SubjectsBean.CastsBean> viewcasts;
    private List<ImageView> ivList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv = (XListView) findViewById(R.id.lv);
        View view = View.inflate(MainActivity.this, R.layout.pager_item, null);
        vp = (ViewPager) view.findViewById(R.id.vp);
        ll = (LinearLayout) view.findViewById(R.id.ll);

        lv.setPullRefreshEnable(true);
        lv.setPullLoadEnable(true);
        lv.setXListViewListener(this);
        //做轮播
        sendMsg();
	//进行缓存操作
        sp = getSharedPreferences("config", MODE_PRIVATE);
        options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher)
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .build();

 
        if (sp.getString("json", null) == null) {
            Toast.makeText(this, "第一次", Toast.LENGTH_SHORT).show();
            new Thread() {

                @Override
                public void run() {
                    super.run();
                    String path = "https://api.douban.com/v2/movie/in_theaters?apikey=0b2bdeda43b5688921839c8ecb20399b&city=北京&start=" + pager + "&count=2";
                    String json = NetWork.getJson(path);
                    sp.edit().putString("json", json).commit();
                    getGsonData(json);
                    //Toast.makeText(MainActivity.this,json,Toast.LENGTH_LONG).show();
                }

            }.start();
        } else {
            Toast.makeText(this, "第二次有缓存了", Toast.LENGTH_SHORT).show();
            String json = sp.getString("json", null);
            getGsonData(json);
        }


    }

    /**
     * 刷新操作
     */
    @Override
    public void onRefresh() {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                new Thread() {
                    @Override
                    public void run() {
                        super.run();
                        pager++;
                        String path = "https://api.douban.com/v2/movie/in_theaters?apikey=0b2bdeda43b5688921839c8ecb20399b&city=北京&start=" + pager + "&count=2";
                        String json = NetWork.getJson(path);
                        Gson gson = new Gson();
                        BeiJingBean beiJingBean = gson.fromJson(json, BeiJingBean.class);
                        List<BeiJingBean.SubjectsBean> subjects = beiJingBean.getSubjects();
                        List<BeiJingBean.SubjectsBean.CastsBean> casts1 = subjects.get(0).getCasts();
                        casts.addAll(0, casts1);
                        Message message = new Message();
                        message.what = 1;
                        message.obj = json;
                        handler.sendMessage(message);
                    }
                }.start();

            }
        }, 2000);

    }

    @Override
    public void onLoadMore() {

    }

    /**
     * 做轮播
     */
    public void sendMsg() {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                handler.sendEmptyMessage(2);
            }
        }, 2000);
    }

    /**
     * 轮播的小点
     */
    public void initDot() {

        ivList = new ArrayList<>();
        if (ivList != null) {
            ivList.clear();
        }
        for (int i = 0; i < viewcasts.size(); i++) {
            ImageView iv = new ImageView(MainActivity.this);
            if (i == 0) {
                iv.setImageResource(R.drawable.dot_select);
            } else {
                iv.setImageResource(R.drawable.dot_normal);
            }
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(10, 10);
            layoutParams.setMargins(10, 0, 10, 0);
            ll.addView(iv, layoutParams);
            ivList.add(iv);

        }
    }

    /**
     * MyViewPager适配器
     */
    class MyViewPager extends PagerAdapter {

        @Override
        public Object instantiateItem(ViewGroup container, int position) {

            ImageView imageView = new ImageView(MainActivity.this);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            ImageLoader.getInstance().displayImage(viewcasts.get(position % viewcasts.size()).getAvatars().getLarge(), imageView, options);
            container.addView(imageView);
            return imageView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }

        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }
    }


    /**
     * MyAdapter适配器
     */
    class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return casts.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = View.inflate(MainActivity.this, R.layout.xlist_item, null);
                holder.iv = (ImageView) convertView.findViewById(R.id.iv);
                holder.tv = (TextView) convertView.findViewById(R.id.tv);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }


            ImageLoader.getInstance().displayImage(casts.get(position).getAvatars().getLarge(), holder.iv, options);
            holder.tv.setText(casts.get(position).getName());


            return convertView;
        }

        class ViewHolder {
            ImageView iv;
            TextView tv;
        }
    }

    /**
     * 解析json
     * @param json
     */
    private void getGsonData(String json) {
        Gson gson = new Gson();
        BeiJingBean beiJingBean = gson.fromJson(json, BeiJingBean.class);
        subjects = beiJingBean.getSubjects();
        casts = subjects.get(0).getCasts();
        viewcasts = subjects.get(1).getCasts();
        Message message = new Message();
        message.obj = subjects;
        message.what = 0;
        handler.sendMessage(message);

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值