android - 当我在 Listview 项目 android 中向下滚动时,项目保存的值消失

标签 android listview

public class CustomList extends ArrayAdapter<String> {
    private String[] names;

    private Integer[] imageid;
    private Activity context;
    LayoutInflater inflater;
    List<String> categories;
    boolean firstimagevisible = true;
    boolean secondimagevisible = false;

    public CustomList(Activity context, String[] names, Integer[] imageid) {
        super(context, R.layout.list_layout, names);
        this.context = context;
        this.names = names;

        this.imageid = imageid;

        inflater = LayoutInflater.from(context);

    }


    private class ViewHolder {
        TextView textView;
        ImageView imageView;
        TextView price;
        Button previousimage;
        Button nextimage;
        Spinner sppiner;

    }



    @Override
    public int getViewTypeCount() {

        return getCount();
    }

    @Override
    public int getItemViewType(int position) {

        return position;
    }


    @Override
    public int getCount() {
        return super.getCount();
    }

    @Override
    public long getItemId(int position) {
        return super.getItemId(position);
    }

    @Override
    public String getItem(int position) {
        return super.getItem(position);
    }

    public View getView(final int position, View view, ViewGroup parent) {
        final ViewHolder holder;
        if (view == null) {
            holder = new ViewHolder();
            view = inflater.inflate(R.layout.list_layout, null);
            //
            holder.textView = (TextView) view.findViewById(R.id.editText);
            holder.imageView = (ImageView) view.findViewById(R.id.list_avatar);
            holder.price = (TextView) view.findViewById(R.id.price);
            holder.previousimage = (Button) view.findViewById(R.id.previousimage);
            holder.nextimage = (Button) view.findViewById(R.id.nextimage);
            holder.sppiner = (Spinner) view.findViewById(R.id.sppiner);


            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
        holder.textView.setText(names[position]);
        holder.imageView.setImageResource(imageid[position]);
        categories = new ArrayList<String>();
        for (int i = 1; i <= 20; i++) {

            categories.add(String.valueOf(i));
        }
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(context,
                android.R.layout.simple_spinner_item, categories);
        dataAdapter
                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // attaching data adapter to spinner
        holder.sppiner.setAdapter(dataAdapter);


        holder.previousimage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                holder.imageView.setImageResource(R.drawable.pro1);
                holder.previousimage.setVisibility(View.GONE);
                holder.nextimage.setVisibility(View.VISIBLE);

                secondimagevisible = false;
                firstimagevisible = true;
                holder.price.setText(String.valueOf(1 * 22));
            }
        });

        holder.nextimage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                holder.imageView.setImageResource(R.drawable.pro2);
                holder.nextimage.setVisibility(View.GONE);
                holder.previousimage.setVisibility(View.VISIBLE);
                secondimagevisible = true;
                firstimagevisible = false;
                holder.price.setText(String.valueOf(1 * 16));
            }
        });

        holder.sppiner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                String item = adapterView.getItemAtPosition(i).toString();

                int Quantity = Integer.parseInt(item);
                holder.previousimage.setVisibility(View.GONE);
                if (firstimagevisible == false && secondimagevisible == true) {
                    holder.price.setText(String.valueOf(Quantity * 16));
                } else {
                    holder.price.setText(String.valueOf(Quantity * 22));
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });


        return view;
    }
}

这是我的代码。我在 ListView 中显示 10 个项目。每个在 ImageView 上都有文本和图像。我已经放置了下一个和上一个图像和图像更改,就像我们设置第一个项目 pic1 和第二个项目我点击下一个按钮并将图像更改为 pic2 现在我向下滚动到第 10 个项目,现在再次返回到第一个项目和第二个项目show pic one and next and previous button also disappear while its should save first item pic1 and second item pic2 请告诉我哪里做错了

最佳答案

问题是由缓存引起的,所以我建议在将图像分配给 ImageView 对象之前使用以下代码

            holder.imageView.setDrawingCacheEnabled(false);
            holder.imageView.destroyDrawingCache();
            holder.imageView.setImageDrawable(null);
            holder.imageView.setImageResource(imageid[position]);

关于android - 当我在 Listview 项目 android 中向下滚动时,项目保存的值消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37018823/

相关文章:

android - 使用相机拍照时如何找到 getThumbnail 的 origID.TakePicture

java - Android-如何让 ScrollView 占据屏幕的整个宽度?

java - Arraylist 索引越界异常

listview - 如何将 ListView 中元素的索引绑定(bind)到第一个 ListView 内第二个 ListView 的 ItemsSource 中?

java - 在 Fragment 中填充 ListView 时遇到问题

java - 良好的用户界面设计 : How to handle empty ListView?

Android加速度计的困难

java - 如何将可绘制图像转换为List <ResolveInfo>?

java - Android:具有两个不同 View 的 EfficientAdapter

android - 如何使用多个 Horizo​​ntalListView 填充布局