Функция getView() класса адаптера не вызывается для Android ListView

Я пытаюсь создать ListView со списком элементов, каждый из которых имеет три компонента.

  1. Название (SezonNo)
  2. Описание
  3. Изображение (SezonThumb)

Ниже приведен код файла макета «layout_album», как будет выглядеть каждый элемент в списке:

<?xml version = "1.0" encoding = "utf-8"?>
<ScrollView 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:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".Activities.SeasonsActivity">
    <LinearLayout
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:orientation = "vertical">

        <ImageView
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:id = "@+id/imgThumbnail"
            android:clickable = "true"
           />
        <TextView
            style = "@style/style_textviewsProfile"
            android:layout_margin = "0dp"
            android:textStyle = "bold"
            android:id = "@+id/textViewSeasonNo"
            android:text = "Season No:     " />
        <TextView
            android:id = "@+id/textViewDescription"
            style = "@style/style_textviewsProfile"
            android:text = "Description:      " />
        <View
            android:layout_width = "match_parent"
            android:layout_height = "4dp"
            android:background = "@color/Gray"></View>
    </LinearLayout>
</ScrollView>

Ниже приведен код действия:

  public void onCreate(){
     super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_seasons);
          listView_seasons=findViewById(R.id.list_seasons);

            txtTitle = findViewById(R.id.txtTitle);

            String[] seasonNos=new String[]{"1","2","3","4","5"};
            String[] seasonDescriptions=new String[]{"a","b","c","d","e"};
           int[] seasonThumbs= new int[]{R.drawable.sezon1, R.drawable.sezon2, R.drawable.flag, R.drawable.flag, R.drawable.flag};


      adapter=new ListAdapter(this,seasonNos,seasonDescriptions,seasonThumbs);
            listView_seasons.setAdapter(adapter);

    }
    //____________________________Adapter Class________________________//

      public class ListAdapter extends ArrayAdapter<String> {
            Context context;
            String sezonNo[];
            String desc[];
            int[] imgs;

            public ListAdapter(@NonNull Context context, String[] sezonNo, String[] desc, int[] imgs) {


                super(context,R.layout.layout_album,R.id.textViewSeasonNo,sezonNo);
                this.context=context;
                this.sezonNo = sezonNo;
                this.desc = desc;
                this.imgs = imgs;
                Log.d("List","Adapter");
            }

            @Override
            public int getCount() {
                return 0;
            }


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

            @Override
            public View getView(int position, View view, ViewGroup parent) {
                Log.d("List","setting bindings...");
               view=getLayoutInflater().inflate(R.layout.layout_album,null);

                TextView txtSezonNo=view.findViewById(R.id.textViewSeasonNo);
                TextView txtDescription=view.findViewById(R.id.textViewDescription);

                ImageView imgThumbnail=view.findViewById(R.id.imgThumbnail);


                progressDialog.hide();

                txtSezonNo.setText(seasonNos[position]);
                txtDescription.setText(seasonDescriptions[position]);
                imgThumbnail.setImageResource(seasonThumbs[position]);

                return view;
            }
        }

Конструктор класса адаптера вызывается, но getView() вообще не вызывается.

view=getLayoutInflater().inflate(R.layout.layout_album,null)‌​; измените это на view=getLayoutInflater().inflate(R.layout.layout_album,paren‌​t,false);

Monkey D Loofi 18.04.2019 20:02

Прежде всего, не используйте вместо этого listview, используйте recyclerview.

Koushik Mondal 18.04.2019 20:03

Это потому, что счетчик элементов вашего адаптера статически установлен на 0.

ror 18.04.2019 20:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ваш getView() не вызывается, потому что размер, который вы вернули в getCount(), равен 0

пожалуйста, в свой getCount() поместите это:

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

также getItemId не должно быть 0 для всех, простым решением может быть возврат позиции элемента в списке. верни position лайк

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

Решено. Спасибо!

Muzzammil Hussain 20.04.2019 08:29

Другие вопросы по теме