ViewPager和ListView

图片轮播

定义图片集合

/**
     * 图片集合
     */
    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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值