单个listView展示多类型Item出现混乱显示的问题
来源:互联网 发布:传奇盗取管理权限软件 编辑:程序博客网 时间:2024/06/02 03:21
一般来说一个listview 应该展示同一种类型的item,因为系统会对第一页的item缓存下来,这样可以在getView的时候判断view是不是空的,空就创建一个,否则就利用缓存的那个view,创建view的时候可以添加holder,这样的好处就是不用每次都去找子view的id,这样子无论有多少条数据展示的时候也就是缓存一页界面的view,并且最多找到一页界面子view的id。如果不是同一种类型的话,第二页的view拿到的是缓存的view,这样显示就出现相同混乱的情况了。解决的这样的方法我想到:
1.对每个暂时的view都创建,就是不要利用系统帮你缓存的view,实现了效果,坏处就是每个item都要创建,都要找id,很有可能出现切换不流畅的问题,尤其的viewpager里面切换时。
优化:
既然我创建了view,那么我把它缓存下来,这样向上滑动时直接拿缓存缓存的好了,向下滑动时对于新出现的view才创建。
public class RanlListOnClickAdapter extends BaseAdapter{private List<RankListClickBean> mDatas;private Context mContext;private List<View> mViews;//系统不帮我缓存,我自己缓存下来/(ㄒoㄒ)/~~public RanlListOnClickAdapter(Context context) {this.mContext = context;mViews = new ArrayList<>();}public void setData(List<RankListClickBean> mDatas){this.mDatas = mDatas;}@Overridepublic int getCount() {return (mDatas==null)?0:mDatas.size() ;}@Overridepublic Object getItem(int arg0) {return mDatas.get(arg0);}@Overridepublic long getItemId(int arg0) {return arg0;}/** *这个界面坑爹啊,自己坑自己,这样没法利用缓存,只能不断创建,强烈不建议这样做!!!!唯一想到优化的方法 *就是自己缓存下来,列表界面应该尽可能保持一致 */@Overridepublic View getView(int arg0, View arg1, ViewGroup arg2) {View mView = arg1;int position = arg0;HoldermHolder = new Holder();Boolean isTag = mDatas.get(position).getIsTag();if(position == mViews.size()){if(isTag) {mView = LinearLayout.inflate(mContext, R.layout.adapter_ranklist_click_tag, null);mHolder.TagText = (TextView) mView.findViewById(R.id.adapter_ranklist_click_tag_text);}else{mView = LinearLayout.inflate(mContext, R.layout.adapter_ranklist_item, null);mHolder.title = (TextView) mView.findViewById(R.id.adapter_ranklist_item_title);mHolder.uploadername = (TextView) mView.findViewById(R.id.adapter_ranklist_item_uploadname);mHolder.clicknums = (TextView) mView.findViewById(R.id.adapter_ranklist_item_clicknums);mHolder.number = (TextView) mView.findViewById(R.id.adapter_ranklist_item_num);}mView.setTag(mHolder);mViews.add(mView);}else{mView = mViews.get(position);mHolder = (Holder) mView.getTag();}if(isTag){String tagtext = mDatas.get(position).getRankType(); mHolder.TagText.setText(tagtext);} else{ClickBean clickbean = mDatas.get(position).getmDataBean();String title = clickbean.getName();String uploadername = clickbean.getCategory();String cliclnums = clickbean.getClickNumber();String number = mDatas.get(position).getNumber();mHolder.title.setText(title);mHolder.uploadername.setText(uploadername);mHolder.clicknums.setText(judegNull(cliclnums));mHolder.number.setText(number);}return mView;}private String judegNull(String clicknum){if(clicknum==null||clicknum.trim().equals(""))return "0";return clicknum;}private class Holder{public TextView title;public TextView uploadername; public TextView clicknums; public TextView number; public TextView TagText;}}
0 0
- 单个listView展示多类型Item出现混乱显示的问题
- ListView中item progressbar显示混乱的问题
- 关于ListView中的item包含RadioButton时出现的混乱
- ListView的item可能出现不同布局造成ListView的item数据混乱问题解决
- ListView中View的显示混乱问题
- RecyclerView的Item复用出现问题导致排版混乱
- android 关于ListView Item数据混乱问题
- android 关于ListView Item数据混乱问题
- ListView中item颜色加载混乱问题!
- Android Listview显示混乱问题
- listView的不同item展示
- listview不同的item展示
- ListView中使用notifyDataSetChanged()刷新,item显示混乱。
- 删除listview列表里面的单个item
- listview和recycleview的刷新单个item
- Listview 更新单个Item布局 和 listview.getLastVisiblePosition()=-1 问题的解决
- ListView多类型Item
- ListView刷新单个item
- git的简单命令
- UI_界面传值方式
- linux nginx 配置 上传等限制
- winform登录时载入验证码,并且点击可刷新
- PHP 解析JSON数组
- 单个listView展示多类型Item出现混乱显示的问题
- opencv2.4.9中K-means算法理解
- 自定义事件分发,执行耗时操作服务
- 容斥原理-shuoj—小明系列之高中时光
- Java instanceof
- JAVA编程中为了提高性能必须要考虑的东西
- RadioGroup+Fragment实现页面之间的切换
- 请求,转发及session
- Hive 初识