Listview添加头和尾,addHeader,addFooter,以及利用尾显示更新过程

首先说一下,因为头和尾都是独立的xml,而且并没有在xml总进行include,所以这里实例化的话会稍微麻烦一点,上代码

private void initView() {

        scorll_linearlayout = (LinearLayout) getActivity().findViewById(R.id.scorll_linearlayout);
        index_indicator_background = (LinearLayout) getActivity().findViewById(R.id.index_indicator_background);
        ptrl = ((PullToRefreshLayout) getActivity().findViewById(R.id.refresh_homepage_view));
        ptrl.setOnRefreshListener(new MyListener());
        listView = (ListView) getActivity().findViewById(R.id.homepage_listview);

        indexListViewAdapter = new IndexListViewAdapter(getActivity(), indexListViewBeanList);
        indexListViewAdapter.update();
        listView.addHeaderView(LayoutInflater.from(getActivity()).inflate(R.layout.item_index_header, null));

        listview_inflater=LayoutInflater.from(getActivity());
        item_listview_footer=listview_inflater.inflate(R.layout.item_listview_footer, null);

        listView.addFooterView(item_listview_footer);

        listview_progress=(ProgressBar)item_listview_footer.findViewById(R.id.listview_progress);
        listview_footer = (TextView) item_listview_footer.findViewById(R.id.listview_footer);
        ((TextView) item_listview_footer.findViewById(R.id.listview_footer)).setText("上拉加载更多");

        listView.setAdapter(indexListViewAdapter);

        listView.setFocusable(true);
        listView.setOnItemClickListener(new IndexOnItemClickListener());

        index_record = (ImageView) getActivity().findViewById(R.id.index_record);
        index_record.setOnClickListener(this);
    }
下面是头的操作

Handler handler3 = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 0:
                    jsonArray = (JSONArray) msg.obj;
                    L.d("handler中的jsonarray", jsonArray.toString());
                    if (jsonArray.length() != 0) {
                        for (int i = 0; i < jsonArray.length(); i++) {
                            try {
                                RollScreenBean rollScreenBean = new RollScreenBean(null, null, null, null, null, null, null, null, null, null);
                                JSONObject rollScreenBeanItem = jsonArray.getJSONObject(i);
                                rollScreenBean.setIndex(rollScreenBeanItem.getString("index"));
                                rollScreenBean.setRollScreenTitle(rollScreenBeanItem.getString("rollscreen_title"));
                                rollScreenBean.setTitle(rollScreenBeanItem.getString("title"));
                                rollScreenBean.setRollScreenImage(BaseUrl + rollScreenBeanItem.getString("rollscreen_image"));
                                rollScreenBean.setImage(BaseUrl + rollScreenBeanItem.getString("image"));
                                rollScreenBean.setVideoId(rollScreenBeanItem.getString("videoid"));
                                rollScreenBean.setVideoUrl(rollScreenBeanItem.getString("url"));
                                rollScreenBean.setGoodNumber(Integer.parseInt(rollScreenBeanItem.optString("praise_num")) + "");
                                rollScreenBean.setCollectNumber(Integer.parseInt(rollScreenBeanItem.optString("collect_num")) + "");
                                rollScreenBeanList.add(rollScreenBean);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                        try {
                            index_view_header = (RelativeLayout) getActivity().findViewById(R.id.index_view_header);
                            index_view_header.setVisibility(View.VISIBLE);
                        } catch (Exception e) {
                            e.getStackTrace();
                        }
                        initPagerView();
                    } else {
                        LayoutInflater.from(getActivity()).inflate(R.layout.item_index_header, null).setVisibility(View.GONE);
                    }
                    break;
            }
        }
    };

    private void initPagerView() {

        view_pager = (ViewPager) getActivity().findViewById(R.id.index_view_pager);
        List<View> list = new ArrayList<View>();
        inflater = LayoutInflater.from(getActivity());
        for (int i = 0; i < jsonArray.length(); i++) {
            item = inflater.inflate(R.layout.item_index_image, null);
            ((TextView) item.findViewById(R.id.index_scorll_text)).setText(rollScreenBeanList.get(i).getRollScreenTitle());
            ((TextView) item.findViewById(R.id.index_scorll_text)).bringToFront();
            list.add(item);
        }

        adapter = new MyAdapter(list);
        view_pager.setAdapter(adapter);

        view_pager.setOnPageChangeListener(new ScorllListener());

        initIndicator();
        ScheduledExecutorService scheduled = Executors.newSingleThreadScheduledExecutor();
        ViewPagerTask pagerTask = new ViewPagerTask();
        scheduled.scheduleAtFixedRate(pagerTask, 4, 4, TimeUnit.SECONDS);
    }

    private class ViewPagerTask implements Runnable {
        @Override
        public void run() {
            currPage = (currPage + 1) % jsonArray.length();
            handler4.sendEmptyMessage(0);
        }
    }

    Handler handler4 = new Handler() {
        public void handleMessage(Message msg) {
            view_pager.setCurrentItem(currPage);
        }

    };

    private void initIndicator() {
        indicator_imgs = new ImageView[jsonArray.length()];
        ImageView imgView;
        View v = getActivity().findViewById(R.id.index_indicator);

        for (int i = 0; i < jsonArray.length(); i++) {
            imgView = new ImageView(getActivity());
            LinearLayout.LayoutParams params_linear = new LinearLayout.LayoutParams(15, 15);
            params_linear.setMargins(10, 15, 10, 15);
            imgView.setLayoutParams(params_linear);
            indicator_imgs[i] = imgView;
            if (i == 0) {
                indicator_imgs[i].setBackgroundResource(R.drawable.indicator_focused);
            } else {
                indicator_imgs[i].setBackgroundResource(R.drawable.indicator);
            }
            ((ViewGroup) v).addView(indicator_imgs[i]);
        }

    }

    private class MyAdapter extends PagerAdapter {

        private List<View> mList;

        private AsyncImageLoader asyncImageLoader;

        public MyAdapter(List<View> list) {
            mList = list;
            asyncImageLoader = new AsyncImageLoader();
        }

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

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

        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
        }

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

            Drawable cachedImage = asyncImageLoader.loadDrawable(rollScreenBeanList.get(position).getRollScreenImage(), new AsyncImageLoader.ImageCallback() {

                public void imageLoaded(Drawable imageDrawable, String imageUrl) {

                    View view = mList.get(position);
                    image = ((ImageView) view.findViewById(R.id.index_scorll_img));
                    image.setBackgroundDrawable(imageDrawable);
                    container.removeView(mList.get(position));
                    container.addView(mList.get(position));
                }
            });

            View view = mList.get(position);
            image = ((ImageView) view.findViewById(R.id.index_scorll_img));
            image.setBackgroundDrawable(cachedImage);
            image.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Thread oadThread = new Thread(new postThread(rollScreenBeanList.get(position).getVideoId(), "play"));
                    oadThread.start();
                    Intent intent = new Intent(getActivity(), VideoViewPlayingActivity.class);
                    intent.putExtra("url_info", rollScreenBeanList.get(position).getVideoUrl());
                    intent.putExtra("id_info", rollScreenBeanList.get(position).getVideoId());
                    intent.putExtra("title_info", rollScreenBeanList.get(position).getTitle());
                    intent.putExtra("image_info", rollScreenBeanList.get(position).getImage());
                    intent.putExtra("good_info", rollScreenBeanList.get(position).getGoodNumber());
                    intent.putExtra("collect_info", rollScreenBeanList.get(position).getCollectNumber());
                    startActivity(intent);
                }
            });

            container.removeView(mList.get(position));
            container.addView(mList.get(position));
            return mList.get(position);

        }

    }

    private class ScorllListener implements ViewPager.OnPageChangeListener {

        @Override
        public void onPageScrollStateChanged(int state) {
            if (state == 0) {
            }
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {

        }

        @Override
        public void onPageSelected(int position) {

            for (int i = 0; i < indicator_imgs.length; i++) {

                indicator_imgs[i].setBackgroundResource(R.drawable.indicator);

            }
            indicator_imgs[position].setBackgroundResource(R.drawable.indicator_focused);
        }

    }

    static class AsyncImageLoader {

        private HashMap<String, SoftReference<Drawable>> imageCache;

        public AsyncImageLoader() {
            imageCache = new HashMap<String, SoftReference<Drawable>>();
        }

        public interface ImageCallback {
            public void imageLoaded(Drawable imageDrawable, String imageUrl);
        }

        public Drawable loadDrawable(final String imageUrl, final ImageCallback imageCallback) {

            if (imageCache.containsKey(imageUrl)) {
                SoftReference<Drawable> softReference = imageCache.get(imageUrl);
                Drawable drawable = softReference.get();
                if (drawable != null) {
                    imageCallback.imageLoaded(drawable, imageUrl);
                    return drawable;
                }
            }

            final Handler handler = new Handler() {
                public void handleMessage(Message message) {
                    imageCallback.imageLoaded((Drawable) message.obj, imageUrl);
                }
            };

            new Thread() {
                @Override
                public void run() {
                    Drawable drawable = loadImageFromUrl(imageUrl);
                    imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
                    Message message = handler.obtainMessage(0, drawable);
                    handler.sendMessage(message);
                }
            }.start();

            return null;
        }

        public Drawable loadImageFromUrl(String url) {

            try {
                HttpClient client = new DefaultHttpClient();
                client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1000 * 15);
                HttpGet get = new HttpGet(url);
                HttpResponse response;

                response = client.execute(get);
                if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    HttpEntity entity = response.getEntity();
                    Drawable d = Drawable.createFromStream(entity.getContent(), "src");
                    return d;
                } else {
                    return null;
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return null;
        }

        public void clearCache() {

            if (this.imageCache.size() > 0) {

                this.imageCache.clear();
            }

        }

    }
下面是尾的操作

public void onLoadMore(final PullToRefreshLayout pullToRefreshLayout) {
            new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    Thread lodeMore = new Thread(new LoadMore());
                    lodeMore.start();
                    listview_progress.setVisibility(View.VISIBLE);
                    listview_footer.setText("正在加载中。。。");
                    handler1 = new Handler() {
                        @Override
                        public void handleMessage(Message msg) {
                            super.handleMessage(msg);
                            switch (msg.what) {
                                case 0:
                                    if (!msg.obj.equals("0") && !msg.equals(MaxId)) {
                                        indexUrlBeanList.addAll(indexUrlBeanList_more);
                                        L.d("indexurlbeanlist的长度", indexUrlBeanList.size() + "");
                                        L.d(indexUrlBeanList.toString());
                                        indexListViewBeanList.addAll(indexListViewBeanList_loadmore);
                                        indexListViewAdapter.update();
                                        listview_progress.setVisibility(View.GONE);
                                        listview_footer.setText("上拉加载");
                                        pullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.SUCCEED);
                                    }
                                    break;
                                case 1:
                                    pullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.FAIL);
                                    listview_footer.setText("请检查网络状态");
                                    T.showShort(getActivity(), "请检查网络状态");
                                    break;
                            }
                        }
                    };
                }
            }.sendEmptyMessageDelayed(0, 500);

说一下其中的重点在哪

listview_inflater=LayoutInflater.from(getActivity());
        item_listview_footer=listview_inflater.inflate(R.layout.item_listview_footer, null);

        listView.addFooterView(item_listview_footer);

        listview_progress=(ProgressBar)item_listview_footer.findViewById(R.id.listview_progress);
        listview_footer = (TextView) item_listview_footer.findViewById(R.id.listview_footer);
        ((TextView) item_listview_footer.findViewById(R.id.listview_footer)).setText("上拉加载更多");

需要自己去定义一个view,还有layoutinflater,然后在此基础上进行界面的更新操作



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值