RecyclerView笔记

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);
			}
		}

		@Override
		public int getItemCount() {
			return leftText.size();
		}

		@Override
		public 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;
		}

		@Override
		public 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() {
						@Override
						public void onLoadingStarted(String arg0, View arg1) {
						}
						
						@Override
						public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
						}
						
						@Override
						public void onLoadingComplete(String url, View arg1, Bitmap arg2) {
							mBitmapHandler.focusImg = arg2;
							arg0.image.setImageBitmap(mBitmapHandler.focusImg);
						}
						
						@Override
						public 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() {
						@Override
						public void onLoadingStarted(String arg0, View arg1) {
						}
						
						@Override
						public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
						}
						
						@Override
						public void onLoadingComplete(String url, View arg1, Bitmap arg2) {
							mBitmapHandler.normalImg = arg2;
							arg0.image.setImageBitmap(mBitmapHandler.normalImg);
						}
						
						@Override
						public 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() {
				@Override
				public void onClick(View v) {
					if (mOnItemClickListener != null){
						mOnItemClickListener.onItemClickListener(v, position);
					}
				}
			});
			
			
			
		}
		
	}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值