所以我的回收站视图加载了包含文本和图像的项目以及一个复选框。最初加载的所有数据都很好,包括使用毕加索的图像。一旦我点击一个按钮,该按钮最初是隐藏的,这不是回收者视图的一部分。复选框应出现在回收站视图的所有项目中。一切都很好,除了我这样做后图像消失的事实。
我这样做的方法是将我的recyclerview的适配器设置为null,然后初始化一个新的Recycler视图适配器,该适配器具有可见的复选框并将其设置为我的Recycler视图。
如果我尝试使用顶部的搜索栏搜索特定列表项,则会发生同样的事情。知道为什么吗?以下是关于如何将适配器设置为我的回收站视图的代码。
// set the adapter to null on cards list view.
cards_list_view.setAdapter(null);
// Initialize the adapter again.
deckCardRecycleAdapter = new DeckCardRecycleAdapter(getActivity(), cards_list, show_checkbox);
// Set the adapter again to list view.
cards_list_view.setAdapter(deckCardRecycleAdapter);
这是适配器中的onBindViewHolder函数。
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
typeface = Typeface.createFromAsset(context.getAssets(), "fonts/futura-medium.otf");
viewHolder.user_name.setTypeface(typeface);
viewHolder.user_name.setText(cards.get(position).getName().toString());
viewHolder.position.setTypeface(typeface);
viewHolder.position.setText(cards.get(position).getPosition().toString());
viewHolder.dot.setTypeface(typeface);
viewHolder.event_saved.setTypeface(typeface);
if(cards.get(position).getEvent_name().toString().equals("None")) {
viewHolder.event_saved.setVisibility(View.GONE);
viewHolder.dot.setVisibility(View.GONE);
}
else
viewHolder.event_saved.setText(cards.get(position).getEvent_name().toString());
viewHolder.date_saved.setTypeface(typeface);
String timestamp = cards.get(position).getTimestamp().toString();
viewHolder.date_saved.setText(toDate(timestamp));
if(cards.get(position).image_url.toString().equals("None"))
viewHolder.user_image.setImageResource(R.drawable.anonymous);
else {
String url_image = cards.get(position).image_url.toString();
Picasso.with(this.context).cancelRequest(viewHolder.user_image);
Picasso.with(context).load(url_image).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
viewHolder.user_image.setImageBitmap(bitmap);
cards.get(position).setImage_url(getStringImage(bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
}
请帮忙。提前致谢。
答案 0 :(得分:0)
我不认为每次重新加载数据都是一个好主意,它会产生很多性能,而你可以创建界面并让项目听取它,只需一行代码就可以改变可见性< / p>
interface Listener {
public void onVisibilityChanged(bool visible);
}
创建一个界面(为可见/不可见设置bool参数)
为管理侦听器创建单独的类(like this)
为每个项目添加监听器(使复选框可见或不可见)
删除项目时删除侦听器(避免NullpointException)
如果回收者重置,则清除侦听器(避免NullpointException)
调用具有foreach
的方法,并且将对所有侦听器进行分类