Android Studio 自定义列表视图滚动缓慢,导致应用停止



我有一个自定义适配器,只有一个ImageView和一个TextView。滚动时,它非常慢,如果您滚动足够多的次数,应用程序最终会停止。我在想我处理这个问题的方式没有效率吗?

public class CustomAdapter extends ArrayAdapter<String> {
CustomAdapter(Context context, String[] breakfast) {
    super(context, R.layout.custom_row, breakfast);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.custom_row, parent, false);
    }
    String breakfastElement = getItem(position);
    TextView customListTextView = (TextView) convertView.findViewById(R.id.customListTextView);
    ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
    customListTextView.setText(breakfastElement);
    switch(breakfastElement) {
        case "Bacon":
            imageView.setImageResource(R.drawable.bacon);
            break;
        case "Eggs":
            imageView.setImageResource(R.drawable.eggs);
            break;
        case "Toast":
            imageView.setImageResource(R.drawable.toast);
            break;
        case "Ham":
            imageView.setImageResource(R.drawable.ham);
            break;
        case "Hashbrown":
            imageView.setImageResource(R.drawable.hashbrowns);
            break;
        case "Biscuits":
            imageView.setImageResource(R.drawable.biscuit);
            break;
        case "Burrito":
            imageView.setImageResource(R.drawable.burrito);
            break;
        case "Cereal":
            imageView.setImageResource(R.drawable.cereal);
            break;
        case "Oatmeal":
            imageView.setImageResource(R.drawable.oatmeal);
            break;
        case "Sausage":
            imageView.setImageResource(R.drawable.sausage);
            break;
        case "Bagel":
            imageView.setImageResource(R.drawable.bagel);
            break;
        case "Croissant":
            imageView.setImageResource(R.drawable.croissant);
            break;
        case "Orange Juice":
            imageView.setImageResource(R.drawable.orangejuice);
            break;
        case "Milk":
            imageView.setImageResource(R.drawable.milk);
            break;
    }
    return convertView;
  }
}

如果我只对每个列表元素使用相同的图像,则不会滚动缓慢。任何帮助不胜感激

编辑:

  CustomAdapter(Context context, ArrayList<Breakfast> breakfastArrayList) {
    super(context, R.layout.custom_row, breakfastArrayList);
    breakfastArray = breakfastArrayList;
}

它不允许我将早餐数组列表作为第三个参数传递

有这样的早餐数据课

public class Breakfast {
  private String name;
  private Drawable drawable;
  public Breakfast(String name, Drawable drawable) {
    this.name = name;
    this.drawable = drawable;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public Drawable getDrawable() {
    return drawable;
  }
  public void setDrawable(Drawable drawable) {
    this.drawable = drawable;
  }
}

创建早餐对象的数组列表,如下所示

ArrayList<Breakfast> breakfastList = new ArrayList<>();
breakfastList.add(new Breakfast("Bacon",R.drawable.bacon);
...
..
.

将此数组列表传递给您的自定义适配器

public class CustomAdapter extends ArrayAdapter<Breakfast> {
    public CustomAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }
    public CustomAdapter(Context context, int resource, List<Breakfast> items) {
        super(context, resource, items);
    }
   ...
   ...
   ...

    customListTextView.setText(breakfastList.get(position).getName());
imageView.setImageDrawable(breakfastList.get(position).getDrawable());
}

PS:鉴于您开始学习Android,建议您查看RecyclerView而不是ListView

我不确定你的错误是什么,但从你的代码来看,我不确定你为什么为此使用 ArrayAdapter。 如果您想根据文本显示图像,我会创建一个带有早餐项目的"早餐项目"类;麦片、爆馅饼、吐司,并将图像与早餐项目配对。 然后,可以将其显示为列表项。

最新更新