Android 列表视图更改图像视图在滚动条上的位置
我将列表视图与自定义阵列适配器一起使用,适配器从Sqlite设置数据。但当列表项达到10个以上(或列表可滚动)时,如果我继续滚动,图像视图会自动改变位置。这是我的自定义适配器代码。谢谢Android 列表视图更改图像视图在滚动条上的位置,android,android-listview,Android,Android Listview,我将列表视图与自定义阵列适配器一起使用,适配器从Sqlite设置数据。但当列表项达到10个以上(或列表可滚动)时,如果我继续滚动,图像视图会自动改变位置。这是我的自定义适配器代码。谢谢 public class CustomeAdapter extends ArrayAdapter<String>{ public Context context; public ArrayList<String> titleArrayList, descArrayList, time
public class CustomeAdapter extends ArrayAdapter<String>{
public Context context;
public ArrayList<String> titleArrayList, descArrayList, timeArrayList, imgArrayList, IdArrayList;
List data;
int layoutResID;
private Bitmap myBitmap;
public CustomeAdapter(Context context, int layoutResourceId, ArrayList<String> titleArrayList, ArrayList<String> descArrayList, ArrayList<String> timeArrayList, ArrayList<String> imgArrayList, ArrayList<String> IdArrayList) {
super(context, layoutResourceId, titleArrayList);
this.context = context;
this.titleArrayList = titleArrayList;
this.descArrayList = descArrayList;
this.timeArrayList = timeArrayList;
this.imgArrayList = imgArrayList;
this.IdArrayList = IdArrayList;
this.data = data;
this.layoutResID = layoutResourceId;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View rowView = convertView;
final StockQuoteView sqView;
if (rowView == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
rowView = inflater.inflate(layoutResID, parent, false);
sqView = new StockQuoteView();
sqView.tag = (TextView) rowView.findViewById(R.id.tv_fullnote);
sqView.desc = (TextView) rowView.findViewById(R.id.tv_title);
sqView.time = (TextView) rowView.findViewById(R.id.tv_time);
sqView.id = (TextView) rowView.findViewById(R.id.id);
sqView.img = (ImageView) rowView.findViewById(R.id.imageView3);
sqView.button1 = (ImageView) rowView.findViewById(R.id.swipe_button1);
sqView.button2 = (ImageView) rowView.findViewById(R.id.swipe_button2);
sqView.button3 = (ImageView) rowView.findViewById(R.id.swipe_button3);
sqView.button4 = (ImageView) rowView.findViewById(R.id.swipe_button4);
rowView.setTag(sqView);
} else {
sqView = (StockQuoteView) rowView.getTag();
}
try {
sqView.tag.setText(titleArrayList.get(position));
sqView.desc.setText(descArrayList.get(position));
sqView.time.setText(timeArrayList.get(position));
sqView.id.setText(IdArrayList.get(position));
sqView.id.setTag(IdArrayList.get(position).toString());
if (imgArrayList.get(position).contains("null")) {
sqView.img.setImageBitmap(null);
sqView.img.setTag("null");
} else {
myBitmap = BitmapFactory.decodeFile(imgArrayList.get(position));
//sqView.img.setImageBitmap((position & 1) == 1 ? myBitmap : myBitmap);
String TAG = "tag";
String id = String.valueOf(position);
sqView.img.setTag(imgArrayList.get(position).toString());
int width = myBitmap.getWidth();
int height = myBitmap.getHeight();
int newWidth = (height > width) ? width : height;
int newHeight = (height > width) ? height - (height - width) : height;
int crop = (width - height) / 2;
crop = (crop < 0) ? 0 : crop;
Bitmap cropImg = Bitmap.createBitmap(myBitmap, crop, 0, newWidth, newHeight);
sqView.img.setImageBitmap(cropImg);
}
} catch (Exception e) {
System.out.print(e.toString());
}
return rowView;
}
protected static class StockQuoteView {
protected TextView tag;
protected TextView desc;
protected TextView time;
protected ImageView img;
protected ImageView button1;
protected ImageView button2;
protected ImageView button3;
protected ImageView button4;
public TextView id;
}
}
`
public类CustomeAdapter扩展了ArrayAdapter{
公共语境;
公共阵列列表标题阵列列表、描述阵列列表、时间阵列列表、imgArrayList、IdArrayList;
列出数据;
int layoutResID;
私有位图;
公共CustomeApter(上下文上下文、内部布局资源ID、ArrayList标题列表、ArrayList描述列表、ArrayList时间ArrayList、ArrayList imgArrayList、ArrayList IdArrayList){
超级(上下文、布局资源ID、标题列表);
this.context=上下文;
this.titleArrayList=titleArrayList;
this.descArrayList=descArrayList;
this.timeArrayList=timeArrayList;
this.imgArrayList=imgArrayList;
this.IdArrayList=IdArrayList;
这个数据=数据;
this.layoutResID=layoutResourceId;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视图行视图=转换视图;
最终库存报价查看sqView;
if(rowView==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
rowView=充气机。充气(layoutResID,父级,false);
sqView=新股票报价查看();
sqView.tag=(TextView)rowView.findViewById(R.id.tv_fullnote);
sqView.desc=(TextView)rowView.findViewById(R.id.tv_title);
sqView.time=(TextView)rowView.findViewById(R.id.tv_time);
sqView.id=(TextView)rowView.findViewById(R.id.id);
sqView.img=(ImageView)rowView.findViewById(R.id.imageView3);
sqView.button1=(ImageView)rowView.findViewById(R.id.swipe_button1);
sqView.button2=(ImageView)rowView.findViewById(R.id.swipe_button2);
sqView.button3=(ImageView)rowView.findViewById(R.id.swipe_button3);
sqView.button4=(ImageView)rowView.findViewById(R.id.swipe_button4);
setTag(sqView);
}否则{
sqView=(StockQuoteView)rowView.getTag();
}
试一试{
sqView.tag.setText(titleArrayList.get(position));
sqView.desc.setText(descArrayList.get(position));
sqView.time.setText(timeArrayList.get(position));
sqView.id.setText(IdArrayList.get(position));
sqView.id.setTag(IdArrayList.get(position.toString());
if(imgArrayList.get(position.contains)(“null”)){
sqView.img.setImageBitmap(null);
sqView.img.setTag(“null”);
}否则{
myBitmap=BitmapFactory.decodeFile(imgArrayList.get(position));
//sqView.img.setImageBitmap((位置&1)==1?myBitmap:myBitmap);
String TAG=“TAG”;
字符串id=String.valueOf(位置);
sqView.img.setTag(imgArrayList.get(position.toString());
int width=myBitmap.getWidth();
int height=myBitmap.getHeight();
int newWidth=(高度>宽度)?宽度:高度;
int newHeight=(高度>宽度)?高度-(高度-宽度):高度;
整数裁剪=(宽度-高度)/2;
作物=(作物<0)?0:作物;
位图cropImg=Bitmap.createBitmap(myBitmap,裁剪,0,newWidth,newHeight);
sqView.img.setImageBitmap(cropImg);
}
}捕获(例外e){
System.out.print(例如toString());
}
返回行视图;
}
受保护的静态类StockQuoteView{
受保护的文本视图标签;
受保护的文本视图描述;
受保护的文本查看时间;
受保护图像视图img;
受保护的图像视图按钮1;
受保护的图像视图按钮2;
受保护的图像视图按钮3;
受保护的图像视图按钮4;
公共文本视图id;
}
}
`
将此行sqView.img.setVisibility(View.INVISIBLE)
放在sqView.img.setTag(“null”)之后编码>并使else语句中的imageView可见,如else{sqView.img.setVisibility(View.Visible)
myBitmap=BitmapFactory.decodeFile(imgArrayList.get(position));
//sqView.img.setImageBitmap((位置&1)==1?myBitmap:myBitmap);
String TAG=“TAG”;
String id=String.valueOf(position);………}
这只是个骗局。我对你的问题没有答案,但你可以通过将convertView传递到你的ViewHolder中并在其中执行所有findViewById()调用来提高getView()的可读性。举个例子:但是,请注意,我使用的是ButterKnife,但其原理是相同的。您也可以放弃rowView,只使用convertView。rowView没有伤害任何东西,但它使阅读变得更困难。我很高兴看到这样一个问题,一次实现了一个ViewHolder。我尝试了一个技巧,例如,因为在我的例子中,这是一个空图像的可能性,所以我只是隐藏包含空值的ImageView,并使其他具有图像路径的人可见。