Android Studio 自定义 ListView 滚动缓慢并导致应用程序停止

标签 android listview custom-adapter

我有一个自定义适配器,只有一个 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;
}

它不允许我将 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

关于Android Studio 自定义 ListView 滚动缓慢并导致应用程序停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44510720/

相关文章:

Android - 单击按钮从 ListView 中删除一行

java - CustomAdapter 覆盖 ListView 中的项目 - Android

Android 应用程序与 Activity

Android Studio 布局编辑器无法正确呈现 srcCompat 矢量绘图(支持库 23.2)

android - 如何处理 Fragment 中的 onBackPressed()?

android: ListView 中的 ListView

android - 下拉刷新并加载到 ListView 中

java - Android recyclerview 在 fragment 中不起作用

android - 如何删除 delphi firemonkey android 平台的 ListView 中的删除按钮?

android - 如何在 ListView 中使用延迟加载或异步任务