Я пытаюсь заполнить пользовательский элемент управления ListView с этим LazyAdapter класса из этого tutorialAndroid элементы пользовательских ListView (findViewById возвращает нуль)
Я хочу, чтобы просмотреть список элементов с нестандартной конструкцией. Файл макета list_row.xml
находится в моем файле макетов, как в учебнике. Это немного измененная функция GetView в LazyAdapter
классе:
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
//vi = inflater.inflate(R.layout.list_row, null); //EDITED
vi = inflater.inflate(R.layout.list_row, parent, false);
TextView title = (TextView)vi.findViewById(R.id.title); // title
TextView subtitle = (TextView)vi.findViewById(R.id.subtitle); // artist name
//ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image);
//This is not needed
//HashMap<String, String> post = new HashMap<String, String>();
HashMap<String, String> post;
post = data.get(position);
// Setting all values in listview
title.setText(post.get("title")); //the code crashes here
subtitle.setText(post.get("subtitle"));
//imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), thumb_image);
return vi;
}
Ну этот код аварии на title.setText()
, потому что название является недействительным. Я где-то читал, что это имеет смысл, потому что этот LazyAdapter вызывает findViewById
до setContentView
или что-то в этом роде.
Итак, как мне это сделать? И как этот код работает для этого парня?
Update
Это list_row.xml
файл:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_selector"
android:orientation="horizontal"
android:padding="5dip" >
<!-- Title -->
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#040404"
android:typeface="sans"
android:textSize="14sp"
android:textStyle="bold"/>
<!-- Subtitle -->
<TextView
android:id="@+id/subtitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/subtitle"
android:textColor="#343434"
android:textSize="10sp"
android:layout_marginTop="1dip" />
</RelativeLayout>
Для экономии места я только добавление ListView
XML из основного файла макета деятельности: Код
<ListView
android:id="@+id/feedListView"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/volumeControl1">
</ListView>
адаптер : http://pastebin.com/niC1yXiJ
И трассировка стека: http://pastebin.com/myW8B0Xz
setContentView используется в действии и не используется в этом случае. Если надуватель действительно раздувает макет с идентификаторами, на которые вы ссылаетесь, не должно быть нулевого указателя. Не могли бы вы разместить xml, который будет вместе с этим? Кроме того, вы должны называть inflater.inflate (R.layout.list_row, parent, false); Это позволяет раздутому макету использовать макет родителя, но ложь не позволяет ему привязываться. Вы также можете опубликовать журнал ошибок – Spidy
Что такое данные ниже строки кода hashmap? Если вы получаете нулевое значение в заголовке, в заголовке сообщения hashmap отсутствует значение по ключу. –
Данные HashMap заполняются .. это работает нормально .. – user568021