Пользовательский адаптер ничего не отображает из фрагмента

У меня есть собственный адаптер под названием MyAdapter, где я пытаюсь загрузить макет, который предположительно должен быть вставлен в список, но даже когда Android не выдает ошибок, представление отображается пустым.

На следующем снимке экрана я показываю, что я получаю после сборки приложения.

Пользовательский адаптер ничего не отображает из фрагмента

Я ожидаю загрузить свой макет в свой список:

Посмотреть список

<?xml version = "1.0" encoding = "utf-8"?>
<FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".Fragments.NewsFragment">

    <ListView
        android:id = "@+id/listView"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"></ListView>
</FrameLayout>

Пользовательский адаптер ничего не отображает из фрагмента

Макет

Пользовательский адаптер ничего не отображает из фрагмента

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout 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:id = "@+id/list_item"
    android:layout_height = "80dp"
    android:orientation = "horizontal">

    <ImageView
        android:id = "@+id/imageabdcf"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_gravity = "center_vertical"
        android:layout_margin = "25dp"
        tools:srcCompat = "@android:drawable/btn_star_big_on" />

    <TextView
        android:id = "@+id/textabcdf"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_gravity = "center_vertical"
        android:layout_weight = "1"
        android:text = "TextView" />
</LinearLayout>

NewsFragment.java

public class NewsFragment extends Fragment {

    private ListView listView;
    private List<String> names;
    public NewsFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_news, container, false);

        listView = (ListView) v.findViewById(R.id.listView);

        names = new ArrayList<String>();
        names.add("Fernando");
        names.add("Roberto");
        names.add("Torres");
        names.add("Urban");

        ArrayAdapter<String> adapter = new ArrayAdapter<>(v.getContext(), android.R.layout.simple_list_item_1, names);

        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getView().getContext(), "Clicked: " + names.get(position), Toast.LENGTH_LONG).show();
            }
        });

        MyAdapter myAdapter = new MyAdapter(v.getContext(), R.layout.card_view_news, names);
        listView.setAdapter(myAdapter);

        // Inflate the layout for this fragment
        return v;
    }

}

MyAdapter.java

public class MyAdapter extends BaseAdapter {

    private Context context;
    private int layout;
    private List<String> names;

    public MyAdapter(Context context, int layout, List<String> names) {
        this.context = context;
        this.layout = layout;
        this.names = names;
    }

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

    @Override
    public Object getItem(int position) {
        return this.names.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {

        View v = convertView;
        LayoutInflater layoutInflater = LayoutInflater.from(this.context);
        v = layoutInflater.inflate(R.layout.fragment_news, null);
        String currentName = names.get(position);
        //currentName = (String) getItem(position);


        TextView textView = (TextView) v.findViewById(R.id.textabcdf);
        textView.setText(currentName);

        return v;
    }
}

И я жду чего-то вроде:

Пользовательский адаптер ничего не отображает из фрагмента

Вы возвращаете 0 из метода MyAdaptergetCount(). Туда нужно вернуть размер вашего List; то есть return names.size();. Кстати, эта установка ArrayAdapter по сути не используется, поскольку вы устанавливаете экземпляр MyAdapter на ListView после этого. Не уверен, что это только что осталось от тестирования.

Mike M. 17.12.2018 04:37

Это решение только закрыло мое приложение само по себе и не решает мою проблему.

Fernando Torres 17.12.2018 04:42

Тогда у вас тоже есть проблема в другом месте. Посмотрите на трассировка стека, чтобы определить причину сбоя.

Mike M. 17.12.2018 04:43

Собственно, я вижу вероятного виновника. Вы раздуваете неправильный макет в getView(). Вам нужно расширить макет элемента списка, а не макет Fragment.

Mike M. 17.12.2018 04:45

Хорошо, спасибо, @Mike M., но почему ты пометил мой вопрос как дублированный? Насколько я знаю, вам или SO необходимо предоставить мне повторяющийся вопрос, который решит мою проблему.

Fernando Torres 17.12.2018 04:47

Ой, извините, я уже видел это в начале вопроса. Мои наилучшие пожелания.

Fernando Torres 17.12.2018 04:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
150
0

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