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