ViewHolder ImageView setVisibility 重复
ViewHolder ImageView setVisibility is repeated
我有一个带有 ViewHolder 模式的适配器。它有一个 TextView 和一个 ImageView。我必须对适配器中的数据库进行一些检查以显示 ImageView 或不显示。
问题是将可见性设置为 View.VISIBLE 也设置为其他位置的其他 ImageView。我确定我的数据库不包含与那些图像视图相关的数据,而只包含正确设置的数据。
这是我的代码(我删除了文本视图集的一部分,因为它运行良好):
public class ChaptersAdapter extends ArrayAdapter<List> {
private final Context context;
private final ArrayList<List> list;
ViewHolder viewHolder;
DatabaseHandler dh;
SQLiteDatabase db;
ArrayList<BookmarksHandler> bookmarksAL;
public ChaptersAdapter(Context context, ArrayList<List> list) {
super(context, R.layout.chaptersadapter, list);
this.context = context;
this.list = list;
}
static class ViewHolder{
TextView titolo;
ImageView imageView;
}
@Override
public View getView(int position, View rowView, ViewGroup parent) {
dh = new DatabaseHandler(context);
db = dh.getWritableDatabase();
bookmarksAL = dh.getAllBookmarks(db);
List chapters = getItem(position);
if(rowView==null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.chaptersadapter, parent, false);
viewHolder = new ViewHolder();
viewHolder.titolo = (TextView) rowView.findViewById(R.id.textView);
viewHolder.imageView = (ImageView) rowView.findViewById(R.id.imageView);
rowView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) rowView.getTag();
}
for(int i = 0; i<bookmarksAL.size(); i++){
if(bookmarksAL.get(i).getId_chapter().equals((String)chapters.get(3))){
viewHolder.imageView.setVisibility(View.VISIBLE);
}
}
return rowView;
}
}
这是我的意思的屏幕截图:
只需要添加带圆圈的imageview,不需要添加上面带X的。如果我向下滚动列表视图,查看器将可见性设置为对不在我的数据库中的其他图像视图也可见。
由于其回收机制,这是 ListView
的正常行为。如果不满足条件
,则重置 ImageView
的可见性
for(int i = 0; i<bookmarksAL.size(); i++){
if(bookmarksAL.get(i).getId_chapter().equals((String)chapters.get(3))) {
viewHolder.imageView.setVisibility(View.VISIBLE);
break;
} else {
viewHolder.imageView.setVisibility(View.GONE);
}
}
对于其他不可见的项目,您还需要设置如下:
for(int i = 0; i<bookmarksAL.size(); i++){
if(bookmarksAL.get(i).getId_chapter().equals((String)chapters.get(3))){
viewHolder.imageView.setVisibility(View.VISIBLE);
}
else
viewHolder.imageView.setVisibility(View.INVISIBLE);
}
最好设置INVISIBLE
因为GONE
会改变你的布局
希望对您有所帮助!
我有一个带有 ViewHolder 模式的适配器。它有一个 TextView 和一个 ImageView。我必须对适配器中的数据库进行一些检查以显示 ImageView 或不显示。 问题是将可见性设置为 View.VISIBLE 也设置为其他位置的其他 ImageView。我确定我的数据库不包含与那些图像视图相关的数据,而只包含正确设置的数据。
这是我的代码(我删除了文本视图集的一部分,因为它运行良好):
public class ChaptersAdapter extends ArrayAdapter<List> {
private final Context context;
private final ArrayList<List> list;
ViewHolder viewHolder;
DatabaseHandler dh;
SQLiteDatabase db;
ArrayList<BookmarksHandler> bookmarksAL;
public ChaptersAdapter(Context context, ArrayList<List> list) {
super(context, R.layout.chaptersadapter, list);
this.context = context;
this.list = list;
}
static class ViewHolder{
TextView titolo;
ImageView imageView;
}
@Override
public View getView(int position, View rowView, ViewGroup parent) {
dh = new DatabaseHandler(context);
db = dh.getWritableDatabase();
bookmarksAL = dh.getAllBookmarks(db);
List chapters = getItem(position);
if(rowView==null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.chaptersadapter, parent, false);
viewHolder = new ViewHolder();
viewHolder.titolo = (TextView) rowView.findViewById(R.id.textView);
viewHolder.imageView = (ImageView) rowView.findViewById(R.id.imageView);
rowView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) rowView.getTag();
}
for(int i = 0; i<bookmarksAL.size(); i++){
if(bookmarksAL.get(i).getId_chapter().equals((String)chapters.get(3))){
viewHolder.imageView.setVisibility(View.VISIBLE);
}
}
return rowView;
}
}
这是我的意思的屏幕截图:
只需要添加带圆圈的imageview,不需要添加上面带X的。如果我向下滚动列表视图,查看器将可见性设置为对不在我的数据库中的其他图像视图也可见。
由于其回收机制,这是 ListView
的正常行为。如果不满足条件
ImageView
的可见性
for(int i = 0; i<bookmarksAL.size(); i++){
if(bookmarksAL.get(i).getId_chapter().equals((String)chapters.get(3))) {
viewHolder.imageView.setVisibility(View.VISIBLE);
break;
} else {
viewHolder.imageView.setVisibility(View.GONE);
}
}
对于其他不可见的项目,您还需要设置如下:
for(int i = 0; i<bookmarksAL.size(); i++){
if(bookmarksAL.get(i).getId_chapter().equals((String)chapters.get(3))){
viewHolder.imageView.setVisibility(View.VISIBLE);
}
else
viewHolder.imageView.setVisibility(View.INVISIBLE);
}
最好设置INVISIBLE
因为GONE
会改变你的布局
希望对您有所帮助!