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
- ViewPager和ListView
- Tablayout和Viewpager,listview
- viewPager和listview嵌套冲突
- 自定义viewpager解决listview和viewpager滑动冲突的问题
- 关于ListView和ViewPager冲突的解决办法
- 解决viewpager和listview滑动冲突
- 解决listView和ViewPager的滑动问题
- Android基础:ListView和ViewPager的Adaper
- 自定义弹性的ListView和ViewPager
- ViewPager、Fragment和ListView的综合使用
- Scrollview和listview 与VIewpager冲突问题
- 关于ListView和ViewPager的一个Bug
- ViewPager + ListView
- 完美解决ListView和ViewPager的滑动冲突
- viewpager中的ListView和fragment获取到设备后退键
- 关于ScrollView中嵌套ListView和Viewpager问题
- ScrollView嵌套listView和Viewpager后的显示不全解决
- Android:ScrollView中嵌套ViewPager和ListView示例
- php中fsockopen模仿post与get详解
- 【C++面向对象】重载++操作符
- LeetCode #377 - Combination Sum IV - Medium
- win7 x64 上安装theano
- 将App设置为设备的启动应用
- ViewPager和ListView
- Android--RecyclerView,SwipeRefreshLayout相关
- 阿里百川码力APP监控 来了!
- 冒泡、选择、插入、归并、快速排序代码
- Activity与intent
- 【MySQL】10条SQL优化语句,让你的MySQL数据库跑得更快!
- Windows 下的 Redis 集群搭建
- inotify使用
- http协议、http事务、URL、http请求的方式、响应码信息、http1.0和1.1区别