У меня есть собственный адаптер под названием 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>
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;
}
}
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;
}
}
И я жду чего-то вроде:
Это решение только закрыло мое приложение само по себе и не решает мою проблему.
Тогда у вас тоже есть проблема в другом месте. Посмотрите на трассировка стека, чтобы определить причину сбоя.
Собственно, я вижу вероятного виновника. Вы раздуваете неправильный макет в getView(). Вам нужно расширить макет элемента списка, а не макет Fragment.
Хорошо, спасибо, @Mike M., но почему ты пометил мой вопрос как дублированный? Насколько я знаю, вам или SO необходимо предоставить мне повторяющийся вопрос, который решит мою проблему.
Ой, извините, я уже видел это в начале вопроса. Мои наилучшие пожелания.




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