RecyclerView笔记

来源:互联网 发布:mac上下载软件必须要 编辑:程序博客网 时间:2024/05/16 08:37
1.问题:RecyclerView使用适配器notifyDataSetChanged()失效
我遇到的问题是,我的适配器的List容器是自己内部news出来的对象,然后初始化时,list.addAll()传入的容器,等到网络数据请求到之后,更新外部的list,然后使用适配器notifyDataSetChanged()失效了,这是因为这时候适配器绑定的数据是我适配器自己内部的list,所以无论你外部的list如何变动,notifyDataSetChanged都不会有效果,只需要再把网络请求到的数据从新添加到适配器里面的list,这时候notifyDataSetChanged就有效果了



2.最近在做一个listview的点击事件,要求点击选中的行对应要背景白色,图片换成红色的,没有选中的背景灰色,图片灰色的
图片是Universal-Image-Loader异步请求的,如果请求的时候,直接设置,会照成局部刷新时,其他图片会跳动,重新加载,这时候我想到的只能是把加载过的,选中的和没选中的图片都用容器保存起来,还好数据不多,不然图片这么多,估计内存要崩了(希望有更好的建议提供)
直接上代码
</pre><pre name="code" class="java">public mRecyclerViewAdapter(List<CategoryList> list) {super();this.leftText.clear();this.leftText.addAll(list);BitmapTagList.clear();for (int i = 0; i < leftText.size(); i++) {BitmapTag bitmapTag = new BitmapTag();bitmapTag.index = i;BitmapTagList.add(bitmapTag);}}@Overridepublic int getItemCount() {return leftText.size();}@Overridepublic mRecyclerViewViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {View v = LayoutInflater.from(getContext()).inflate(R.layout.news_fragment_left_listview_item, arg0, false);AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, ScreenUtils.dip2px(getContext(), 70));v.setLayoutParams(params );mRecyclerViewViewHolder mRecyclerViewViewHolder = new mRecyclerViewViewHolder(v);return mRecyclerViewViewHolder;}class BitmapTag{Bitmap focusImg;Bitmap normalImg;int index;}@Overridepublic void onBindViewHolder(final mRecyclerViewViewHolder arg0, int arg1) {final int position = arg1;final BitmapTag mBitmapHandler = BitmapTagList.get(arg1);Log.e("tag", "text");if (position == currentPositon){arg0.showtitle.setTextColor(Color.RED);arg0.itemView.setBackgroundColor(Color.rgb(255, 255, 255));if (mBitmapHandler.focusImg == null){ImageLoader.getInstance().displayImage(leftText.get(position).getFocusImg(), arg0.image, new ImageLoadingListener() {@Overridepublic void onLoadingStarted(String arg0, View arg1) {}@Overridepublic void onLoadingFailed(String arg0, View arg1, FailReason arg2) {}@Overridepublic void onLoadingComplete(String url, View arg1, Bitmap arg2) {mBitmapHandler.focusImg = arg2;arg0.image.setImageBitmap(mBitmapHandler.focusImg);}@Overridepublic void onLoadingCancelled(String arg0, View arg1) {}});}else{arg0.image.setImageBitmap(mBitmapHandler.focusImg);Log.e("focusImg", "setImageBitmap" + position);Log.e("focusImg", "mBitmapHandler.index = " + mBitmapHandler.index);}}else {arg0.showtitle.setTextColor(Color.BLACK);arg0.itemView.setBackgroundColor(Color.rgb(128, 128, 128));if (mBitmapHandler.normalImg == null){ImageLoader.getInstance().displayImage(leftText.get(position).getNormalImg(), arg0.image, new ImageLoadingListener() {@Overridepublic void onLoadingStarted(String arg0, View arg1) {}@Overridepublic void onLoadingFailed(String arg0, View arg1, FailReason arg2) {}@Overridepublic void onLoadingComplete(String url, View arg1, Bitmap arg2) {mBitmapHandler.normalImg = arg2;arg0.image.setImageBitmap(mBitmapHandler.normalImg);}@Overridepublic void onLoadingCancelled(String arg0, View arg1) {}});}else{arg0.image.setImageBitmap(mBitmapHandler.normalImg);Log.e("normalImg", "setImageBitmap" + position);Log.e("focusImg", "mBitmapHandler.index = " + mBitmapHandler.index);}}//TODO 获取图片点击时候不同的效果arg0.showtitle.setText(leftText.get(position).getCategoryName());//设置点击事件arg0.itemView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (mOnItemClickListener != null){mOnItemClickListener.onItemClickListener(v, position);}}});}}






0 0