2011-09-13 11 views
5

Estoy intentando programar una vista vacía durante tres vistas de lista, es decir, 2 vista ampliable y una lista, que se encuentran en diferentes pestañas:ListView/ExpandableListView setEmptyView() no tiene efecto

LayoutInflater inflater = getLayoutInflater(); 
     View emptyView = inflater.inflate(R.layout.empty_view, null, false); 
... 
ExpListView1.setEmptyView(emptyView); 
ListView.setEmptyView(emptyView); 
ExpListView2.setEmptyView(emptyView); 

no hace ningún efecto - la vista vacía no aparece. Lo mismo pasa con ese pedazo de código:

View emptyView = inflater.inflate(R.layout.empty_view, null, false); 
View emptyRelativeLayout = (RelativeLayout) emptyView.findViewById(R.id.empty_view_layout); 
ExpListView1.setEmptyView(emptyRelativeLayout); 

empty_view_layout.xml:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/empty_view_layout"> 
    <TextView 
    style="@android:style/TextAppearance.Large" 
    android:id="@+id/empty_view_textview" 
    android:layout_width = "fill_parent" 
    android:layout_height="fill_parent" 
    android:text="@string/no_items_in_list" 
    android:layout_centerInParent="true"/> 
</RelativeLayout> 
+1

UPD: Cuando traté de agregar Empty TextView usando @android: id/empty específico, funcionó solo para la vista de lista, pero no para las vistas ampliables. – 87element

Respuesta

6

El problema se resolvió mediante la adición de vista vacía como otro punto de vista contenido a mi Actividad:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    inflater = getLayoutInflater(); 
    emptyView = inflater.inflate(R.layout.empty_view, null); 
    addContentView(emptyView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
+2

Acabo de entender cómo funciona todo esto, pensé que compartiría: tanto la lista ('android.R.id.list') como la vista vacía (' android.R.id.empty') deben estar adjuntas a la actividad como contentView, esto también se puede lograr al ponerlos ambos en el archivo xml de diseño utilizado por 'setContentView', por lo que no hay inflación. Además, no es necesario llamar a 'setEmptyView' si tienen los ID mencionados anteriormente: consulte http://stackoverflow.com/a/2767974/253468. La ventaja de tenerlos en el mismo archivo es que puede personalizar dónde se muestra y cómo, lo más fácil es envolverlos en un 'FrameLayout'. – TWiStErRob

+1

Omitir 'setEmptyView' solo es posible en' ListActivity's. – TWiStErRob

0

tengo hecho de esta manera:

activity_main. xml

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <ExpandableListView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/expListView"> 

     </ExpandableListView> 


     <TextView 
      android:id="@+id/txtEmptyView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:gravity="center" 
      android:padding="10dp" 
      android:text="@string/no_game_available" 
      android:textAppearance="@android:style/TextAppearance.Medium" 
      android:textColor="@android:color/white" /> 

</RelativeLayout> 

MainActivity.java

ExpandableListView expandableListView = (ExpandableListView) findViewById(R.id.expandableListView); 

TextView txtEmptyView = (TextView) view.findViewById(R.id.txtEmptyView); 

expandableListView.setEmptyView(txtEmptyView); 

Hope esto le ayudará.

Cuestiones relacionadas