2013-04-11 3 views
14
<TextView 
      android:id="@android:id/empty" 
      style="@style/FacebookFont" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal" 
      android:text="@string/no_result_found" 
      android:textColor="@color/white" /> 

это xml-код для пустого представления. Я устанавливаю пустой вид следующим образом:Android: установить пустой вид на просмотр списка

list.setAdapter(adapter); 
    list.setEmptyView(findViewById(android.R.id.empty)); 

У меня есть элементы в ListView даже тогда и перед ListView заполняется пустой вид показан. Я не хочу, чтобы этот пустой вид отображался, когда listview содержит какой-либо элемент.

Пожалуйста, помогите.

ответ

14

Если вы используете ListActivity, тогда вам не нужно устанавливать пустой вид вручную. Удалите list.setEmptyView(findViewById(android.R.id.empty)); из вашего кода.

Измените расположение, как показано ниже, то это автоматически добавит EmptyView если список не имеет пункта:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingLeft="8dp" 
     android:paddingRight="8dp"> 

    <ListView android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#00FF00" 
      android:layout_weight="1" 
      android:drawSelectorOnTop="false"/> 

    <TextView android:id="@android:id/empty" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#FF0000" 
      android:text="No data"/> 

</LinearLayout> 
+0

Еще одна проблема. – user2159624

+0

Можете ли вы показать мне полный код операции и код файла макета ??? Добавьте все это в свой вопрос –

+0

, но как вы овладеете этим TextView (или любым видом), если вам нужно что-то сделать с ним, нет никакого реального идентификатора, связанного с ним, вы программно перемещаете макет? – Gubatron

11

Вы должны установить пустой вид перед установкой адаптера, если ваш MainActivity не простирающимся ListActivity.

Попробуйте

list.setEmptyView(findViewById(android.R.id.empty)); 
list.setAdapter(adapter); 

Извините за поздний ответ!

Альтернативный метод: Сделайте свою деятельность расширенной от ListActivity. И добавить в список textview макете с идентификатором android.R.id.empty

5

Попробуйте

View view = getLayoutInflater() .inflate(<resource id of the empty view>, null); 
    ViewGroup viewGroup= (ViewGroup)list.getParent(); 
    viewGroup.addView(view); 
    list.setEmptyView(view); 
    list.setAdapter(adapter); 
5

Есть несколько правильных ответов, однако, я думаю, что это лучший подход, который я нашел:

View emptyView = getLayoutInflater().inflate(R.layout.empty_list_cart, null); 
addContentView(emptyView, listView.getLayoutParams()); // You're using the same params as listView 
listView.setEmptyView(emptyView); 
listView.setAdapter(adapter); 
0

Все, что объяснил @dhawalSodhaParmar, является правильным. Но есть путаница, когда вы смотрите на то, как ответ подавляется.

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
    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=".SampleActivity"> 

    <ListView 
     android:id="@+id/list" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:divider="@null" 
     android:dividerHeight="0dp" /> 

    <!-- Empty view is only visible when the list has no items. --> 
    <TextView 
     android:id="@+id/empty_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:text="NO DOCUMENTS AVAILABLE!" 
     android:textColor="#525252" 
     android:textAppearance="?android:textAppearanceMedium" 
     android:visibility="gone"/> 

</RelativeLayout> 

Предположим, что у вас уже есть вид списка и адаптер, поддерживающий то же самое с данными. При условии, что все работает нормально, кто хочет реализовать этот пустой экран просмотра списка, должен начинаться, как показано ниже: Шаг 1: Измените существующий файл XML активности, который имеет вид списка с тем, который я использовал здесь. Вы можете использовать либо линейную компоновку, либо относительную компоновку, но предпочтительно относительную из-за гибкости. И textView, как я написал.

Шаг 2: Перейти в файл Java активность, и после setContentView

ListView emptyListView = (ListView) findViewById(R.id.list); 
// set your adapter here 
// set your click listener here 
// or whatever else 
emptyListView.setEmptyView(findViewById(R.id.empty_text_view)); 

Вот и все, теперь работают и вы установлены!