ViewPager和ListView

来源:互联网 发布:自学plc编程 编辑:程序博客网 时间:2024/06/02 12:58

图片轮播

定义图片集合

/**     * 图片集合     */    private int[] mPics = {R.mipmap.tologin_banner1, R.mipmap.tologin_banner2,            R.mipmap.tologin_banner3, R.mipmap.tologin_banner4, R.mipmap.tologin_banner6};
private int prePosition = 0;      //定义前一个点    @Override    protected void initialListener() {        mTagVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            /**             * 点的状态监听             * @param position             */            @Override            public void onPageSelected(int position) {//              当前的点选中                mTagVp.getChildAt(position % mPics.length).setSelected(true);//              上一个点不选中                mTagVp.getChildAt(prePosition % mPics.length).setSelected(false);//                记录上个点                prePosition = position % mPics.length;            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }

初始化指示器

private void inVpIndicator() {        //初始化存放图片的集合        mImageViews = new ArrayList<>();        for (int i = 0; i < mPics.length; i++) {            //创建imageview            ImageView imageView = new ImageView(getContext());            imageView.setBackgroundResource(mPics[i]);            //添加进集合            mImageViews.add(imageView);            //创建指示器            View indiatorView = new View(getContext());            //设置宽高            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30, 4);            if (i == 0) {                indiatorView.setSelected(true);                indiatorView.setBackgroundResource(R.drawable.indicator_bg_select);            } else {                indiatorView.setSelected(false);                indiatorView.setBackgroundResource(R.drawable.indicator_bg_select);            }            //添加到容器中            mTagVp.addView(indiatorView, params);        }        mPicAdapter = new PicPagerAdapter();        mTagVp.setAdapter(mPicAdapter);        //设置为中间的为第一个item        int currentItem = Integer.MAX_VALUE / 2 - (Integer.MAX_VALUE / 2) % mPics.length;        mTagVp.setCurrentItem(currentItem);    }

设置自动轮播

 private android.os.Handler mHandler = new android.os.Handler(){        @Override        public void handleMessage(Message msg) {            mTagVp.setCurrentItem(mTagVp.getCurrentItem() + 1);            mHandler.sendEmptyMessageDelayed(0,3000);        }    };    /**     * 开始轮播     */    private void startAutoRound(){        mHandler.sendEmptyMessageDelayed(0,3500);    }    /**     * 停止轮播     */    private void stopAutoRound(){        mHandler.removeMessages(0);    }    @Override    public void onResume() {        super.onResume();        startAutoRound();    }    @Override    public void onPause() {        super.onPause();        stopAutoRound();    }    @Override    public void onDetach() {        super.onDetach();        stopAutoRound();    }

图片适配器

private class PicPagerAdapter extends PagerAdapter {        @Override        public int getCount() {            return Integer.MAX_VALUE;        }        @Override        public boolean isViewFromObject(View view, Object object) {            return view == object;        }        @Override        public Object instantiateItem(ViewGroup container, int position) {            //取出imageview            ImageView imageView = mImageViews.get(position % mPics.length);            //添加到容器            container.addView(imageView);            return imageView;        }        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            container.removeView(mImageViews.get(position % mPics.length));        }    }

标题ListView

直接上代码吧·······

 /**     *     * //////////////////////////////////////////////////     *     * 标题List部分     *     */    private void getTopicData() {        //获取标题数据        HttpTopic.getTopic("", UrlData.URL_GET_TOPIC_LISTHOT,mCallBack);        HttpTopic.getTopic("", UrlData.URL_GET_TOPIC_LISTNEW,mNewCallBack);    }    private List<TopicInfo> mTopicList;    private MatchCallBack<List<TopicItem>> mNewCallBack = new MatchCallBack<List<TopicItem>>() {        @Override        public void success(List<TopicItem> listEntities) {            /*if(mRefreshLayout != null){                mRefreshLayout.endRefreshing();            }*/            //添加数据到新的集合            TopicInfo info = new TopicInfo("第一个大标题内容");            //把子标签的集合放进来            info.addAllItem(listEntities);            mTopicList.add(0,info);            Log.d(TAG, "sucesss: " + mTopicList.size());            //通知更新            mTagAdapter.notifyDataSetChanged();        }        @Override        public void error(String ex) {            /*if(mRefreshLayout != null){                mRefreshLayout.endRefreshing();            }*/        }    };    private MatchCallBack<List<TopicItem>> mCallBack = new MatchCallBack<List<TopicItem>>() {        @Override        public void success(List<TopicItem> listEntities) {           /* if(mRefreshLayout != null){                mRefreshLayout.endRefreshing();            }*/            //添加数据到新的集合            TopicInfo info = new TopicInfo("第二个大标题内容");            //把子标签的集合放进来            info.addAllItem(listEntities);            mTopicList.add(info);            Log.d(TAG, "sucesss: " + mTopicList.size());            //通知更新            mTagAdapter.notifyDataSetChanged();        }        @Override        public void error(String ex) {           /* if(mRefreshLayout != null){                mRefreshLayout.endRefreshing();            }*/        }    };


标题适配器

private TopicTagAdapter mTagAdapter;    private class TopicTagAdapter extends BaseAdapter {        /**         * 标签         */        public static final int ITEM_TAG = 0;        /**         * 内容item         */        public static final int ITEM_CONTENT = 1;        @Override        public int getCount() {            if(mTopicList != null){                int count = 0;                for (TopicInfo info : mTopicList) {                    count += info.getItemCount();                }                Log.d(TAG, "getCount: " + count);                return count;            }            return 0;        }        @Override        public Object getItem(int position) {            // 每组数据的tag            int firstIndex = 0;            for (TopicInfo info :  mTopicList) {                //取出组数据的size                int size = info.getItemCount();                int childItemIndex = position - firstIndex; // 21 - 21                //取出孩子的数据                if(childItemIndex < size){                    return info.getItem(childItemIndex);                }                //将tag移动到下一组数据的标签tag位置                firstIndex += size;            }            return null;        }        @Override        public int getItemViewType(int position) {            int firstIndex = 0;            for (TopicInfo info :mTopicList) {                int size = info.getItemCount();                int childItemIndex = position - firstIndex;                if(childItemIndex == 0){                    return ITEM_TAG;                }                //将tag移动到下组数据的开始                firstIndex += size;            }            return ITEM_CONTENT;        }        @Override        public int getViewTypeCount() {            return super.getViewTypeCount() +1;        }        @Override        public long getItemId(int position) {            return 0;        }        @Override        public View getView(final int position, View convertView, ViewGroup parent) {            int itemViewType = getItemViewType(position);            switch (itemViewType){                case ITEM_TAG:  //标签                    convertView = View.inflate(getContext(),R.layout.item_topic_tag,null);                    TextView tvTag  = (TextView) convertView.findViewById(R.id.tv_topic_tag);                    TextView tvMore  = (TextView) convertView.findViewById(R.id.tv_topic_more);                    tvTag.setText(getItem(position).toString());                    tvMore.setOnClickListener(new View.OnClickListener() {                        @Override                        public void onClick(View v) {                            //根据获取的tag名称去集合中找是否有包含这个名称的对象                            for (TopicInfo info : mTopicList) {                                //获取标签的名称和info里面的tag进行比较,如果相等,表示当前点击的是这个对象里面的                                if(getItem(position).equals(info.getTag())){                                    //传递数据                                    Bundle bundle = new Bundle();//                                    TopicInfo info = mTopicList.get(position);  // 不能从这里取,集合里2 ,position=21                                    bundle.putParcelable(TopicListActivity.EXTRA_TOPIC_LIST, info);                                    startToActivity(TopicListActivity.class, bundle);                                    return;                                }                            }//                            Toast.makeText(getContext(), "" + position, Toast.LENGTH_SHORT).show();                        }                    });                    break;                case ITEM_CONTENT:  //item内容                    convertView = View.inflate(getContext(),R.layout.item_topic_content,null);                    TextView tvTitle  = (TextView) convertView.findViewById(R.id.tv_title);                    TextView tvDes = (TextView) convertView.findViewById(R.id.tv_des);                    //获取对象                    Log.d(TAG, "getView: " + getItem(position).toString());                    final TopicItem item = (TopicItem) getItem(position);                    tvTitle.setText(item.getName());                    tvDes.setText(item.getSeeCount() + "次浏览");                    //item点击事件                    convertView.setOnClickListener(new View.OnClickListener() {                        @Override                        public void onClick(View v) {                            //判断当前点击的item是否是集合中topicInfo对象的                            for (TopicInfo info : mTopicList) {                                //判断集合中是否包含当前点击的topicItem                                if(info.getTopicItems().contains(item)){                                    //传递数据                                    Bundle bundle = new Bundle();//                                    TopicInfo info = mTopicList.get(position);       不可以从这里获取                                    bundle.putParcelable(TopicListActivity.EXTRA_TOPIC_LIST, info);                                    startToActivity(TopicListActivity.class, bundle);                                }                            }                        }                    });                    break;            }            return convertView;        }    }


最后一定要记得初始化

    @Override    protected void initialData() {        inVpIndicator();        //获取话题数据        mTopicList = new ArrayList<>();        //设置适配器        mTagAdapter = new TopicTagAdapter();        mTagListview.setAdapter(mTagAdapter);        getTopicData();    }


一个xml(其实后面还有两个,这里只附大布局)

写在后面的话:其实当时写的这个界面还有刷新状态,但是因为重点是记录这两个,所以刷新的就没有写进来了,中间穿插的刷新代码也就被“砍”了

                            中间还有两个基类。

<RelativeLayout        android:layout_width="match_parent"        android:layout_height="200dp">        <android.support.v4.view.ViewPager            android:id="@+id/tag_vp"            android:layout_width="match_parent"            android:layout_height="match_parent">        </android.support.v4.view.ViewPager>        <LinearLayout            android:orientation="horizontal"            android:id="@+id/tag_ll_dot"            android:layout_marginBottom="15dp"            android:layout_centerInParent="true"            android:layout_alignParentBottom="true"            android:layout_width="wrap_content"            android:layout_height="wrap_content">        </LinearLayout>    </RelativeLayout>    <ListView        android:id="@+id/tag_lv_content"        android:layout_width="match_parent"        android:layout_height="match_parent">    </ListView>

                           

FIN.







0 0