Я боролся с этой проблемой на протяжении всей жизни моего проекта.У меня есть много списков в моем проекте, и большинство из них имеют заголовки.Я делаю отдельный файл макета и добавляю его в список, используя addHeaderView ().Проблема в том, что когда данные (ArrayList, в моем случае) пустые, заголовок не появляется.После нескольких часов поиска способа повторного использования макета заголовка в качестве пустого представления, я сдался и решил скопировать макет в коде и назначить его как пустое представление с помощью setEmptyView ().Проблема в том, что многие заголовки содержат интерактивные представления, и поэтому мне приходится удваивать всю мою интерактивную логику для каждого дублируемого представления.Я пытался включить заголовок раньше, но не смог, в основном потому, что я до сих пор не совсем понимаю, как раздуваются макеты и т. Д.
Наконец, я нашел решение, которым я хотел бы поделиться с сообществомна случай, если у других возникнут аналогичные проблемы.Я не знаю, является ли это лучшим способом решения этой проблемы, и любые отзывы или предложения определенно приветствуются.
вот код для макета, который содержит представление списка:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<ListView
android:id="@+id/lv_my_list"
style="@style/ListStyle"
android:headerDividersEnabled="false"
/>
<include
layout="@layout/my_list_header"
android:id="@+id/my_list_empty"
/>
</LinearLayout>
стиль определяет ширину и высоту макета, среди прочего.
теперь у меня есть файл макета, который содержит представление заголовка
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/my_list_header"
>
<Button
android:id="@+id/my_list_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Click Me"
/>
</LinearLayout>
Я знаю, что LinearLayout не очень эффективен иЯ экспериментирую с слиянием или другими мерами по повышению эффективности, но это первая версия, которая работает, поэтому я собираюсь сейчас с ней работать.Наконец, код:
// set up the header
myListView = (ListView)findViewById(R.id.lv_my_list);
View header = View.inflate(this, R.layout.my_list_header, null);
Button b = (Button)header.findViewById(R.id.my_list_button);
b.setOnClickListener(this);
myListView.addHeaderView(header);
// set up the empty view
LinearLayout ll = (LinearLayout)findViewById(R.id.my_list_empty);
b = (Button)ll.findViewById(R.id.my_list_button);
b.setOnClickListener(this);
meLocalListView.setEmptyView(ll);
Причина, по которой я обернул кнопку в макете, заключается в том, что я могу настроить каждый экземпляр кнопки на использование его в качестве OnClickListener, а затем ссылаться на них обоих с одним идентификатором:R.id.my_list_button в моем методе onClick.Мне нужно проверить это намного больше, но пока это работает.Я еще не реализовал его во всех своих списках, только один, чтобы он не работал во всех ситуациях.Если у вас есть какие-либо предложения, пожалуйста, дайте мне знать, потому что это проблема для меня в течение долгого времени.Одной из проблем может быть то, что если вы хотите создать экземпляр кнопки из идентификатора, вам, вероятно, придется снова пройти весь этот процесс, чтобы получить правильные идентификаторы?