Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 列表视图更改图像视图在滚动条上的位置_Android_Android Listview - Fatal编程技术网

Android 列表视图更改图像视图在滚动条上的位置

Android 列表视图更改图像视图在滚动条上的位置,android,android-listview,Android,Android Listview,我将列表视图与自定义阵列适配器一起使用,适配器从Sqlite设置数据。但当列表项达到10个以上(或列表可滚动)时,如果我继续滚动,图像视图会自动改变位置。这是我的自定义适配器代码。谢谢 public class CustomeAdapter extends ArrayAdapter<String>{ public Context context; public ArrayList<String> titleArrayList, descArrayList, time

我将列表视图与自定义阵列适配器一起使用,适配器从Sqlite设置数据。但当列表项达到10个以上(或列表可滚动)时,如果我继续滚动,图像视图会自动改变位置。这是我的自定义适配器代码。谢谢

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,并使其他具有图像路径的人可见。