Приложение ListView удручающе медленно, не в состоянии понять, почему

#android #listview

#Android #listview

Вопрос:

Кажется, все в порядке (кроме того, что оно довольно медленное), за исключением того факта, что я не могу увидеть последние несколько просмотров моего приложения ListView. Я попытался изменить высоту моего пользовательского макета представления для каждого элемента ListView и понял, что чем меньше высота, тем больше просмотров я не вижу. Это означало, что в нижней части моего ListView была фиксированная длина высоты, которую я не могу прокрутить, и я понятия не имею, почему.

Код из MainActivity.java

 public class MainActivity extends AppCompatActivity {

    String[] titles;
    String[] descriptions;
    int[] drawables = {R.drawable.number0, R.drawable.number2, R.drawable.number3, R.drawable.number4, R.drawable.number5, R.drawable.number6, R.drawable.number7, R.drawable.number8, R.drawable.number9, R.drawable.number10};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Resources res = getResources();
        titles = res.getStringArray(R.array.title);
        descriptions = res.getStringArray(R.array.description);

        ListView l = (ListView) findViewById(R.id.listview);
        myadapter myadapter = new myadapter(this, titles, drawables, descriptions);
        l.setAdapter(myadapter);

    }
}
class myadapter extends ArrayAdapter<String>{
        Context c;
        int[] drawables;
        String[] titles;
        String[] descriptions;

    public myadapter(Context context, String[] titles, int[] drawables, String[] descriptions ) {
        super(context,R.layout.single_row, R.id.title,titles);
        c=context;
        this.drawables = drawables;
        this.titles = titles;
        this.descriptions = descriptions;
    }

    public View getView(int position,  View convertView,  ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater i = (LayoutInflater) c.getSystemService(c.LAYOUT_INFLATER_SERVICE);
            v = i.inflate(R.layout.single_row, parent, false);
        }
        ImageView image = (ImageView) v.findViewById(R.id.image);
        TextView title = (TextView) v.findViewById(R.id.title);
        TextView description = (TextView) v.findViewById(R.id.description);

        image.setImageResource(drawables[position]);
        title.setText(titles[position]);
        description.setText(descriptions[position]);

        return v;
    }
}
 

Код из XML-файла пользовательского макета:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@ id/relative_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:layout_editor_absoluteX="8dp"
    tools:layout_editor_absoluteY="8dp">

    <ImageView
        android:id="@ id/image"
        android:layout_width="90dp"
        android:layout_height="90dp"
        app:srcCompat="@drawable/number0" />

    <TextView
        android:id="@ id/title"
        android:layout_width="332dp"
        android:layout_height="36dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_toEndOf="@ id/image"
        android:layout_toRightOf="@ id/image" />

    <TextView
        android:id="@ id/description"
        android:layout_width="320dp"
        android:layout_height="49dp"
        android:layout_below="@ id/title"
        android:layout_alignStart="@id/title"
        android:layout_alignLeft="@id/title"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_toEndOf="@ id/image"
        android:layout_toRightOf="@ id/image" />
</RelativeLayout>
 

The activity_main.xml файл просто содержит представление списка.

Ответ №1:

в видеоуроке используется формат файла png, вместо этого он мог бы использовать файлы меньшего размера. Ваш просмотр списка может быть медленным, потому что для его отображения требуется время, чтобы привлечь так много ресурсов? Вы пробовали просто отображать только текст?

извините, это больше похоже на комментарий, чем на ответ, но я не могу оставлять комментарии, пока не наберу 50 повторений

Комментарии:

1. Хороший совет. Я попытался удалить компонент изображения, и теперь мое приложение работает очень плавно! Я не думал, что рисование файла png займет так много ресурсов. Спасибо за помощь! 🙂 Знаете ли вы причину другой проблемы, с которой я сталкиваюсь? Я почему-то не могу прокрутить до самого низа моего ListView.

2. Можете ли вы добавить более подробную информацию о том, как u не может прокручиваться до конца? Установлен ли ListView в соответствие с родительским для ширины и высоты макета?

3. В моем ListView есть 10 элементов. Когда я прокручиваю вниз, я вижу только половину 9-го элемента и ни одного из 10-го элемента. Я продолжаю прокручивать, но он просто останавливается там (как будто он уже достиг дна). Я попытался изменить высоту каждого элемента представления в моем listview, и чем меньше высота, тем больше элементов, которые не отображаются. Это означало, что, похоже, в нижней части моего ListView есть фиксированное пространство, которое не отображается. Может ли быть так, что система ошибочно воспринимает экран моего телефона как более длинный, чем он есть на самом деле? Спасибо за вашу помощь!!

4. когда вы прокручиваете, можете ли вы видеть весь отображаемый список? т. Е. Что-нибудь блокирует какой-либо из вашего списка при первом запуске приложения?

5. Нет, ничто не блокирует его. Я вижу все, кроме нескольких последних элементов в моем списке. lol так странно.