ListView artículo no encontrado

Mi aplicación está usando el modo de pantalla completa en pantalla y el cajón de navegación. Estoy usando listView en mi aplicación junto con un edittext . El edittext es la barra de búsqueda que buscará el listview . Tanto el listview como el edittext están en el cajón de navegación. Pero, cuando no hay ningún elemento de lista que coincida con la palabra buscada, el listview se vacía.

Entonces, ¿cómo puedo agregar un mensaje "No encontrado artículo" en lugar de la lista en blanco?

Busqué mucho en Internet y encontré un método setEmptyView(); Pero no pude entenderlo y por lo tanto no está funcionando. ¡Por favor, ayúdame! Tal vez esta pregunta ya se ha hecho aquí, pero por favor, dame una explicación fácil.

Aquí está mi código:

MainActivity.java

 public class MainActivity extends FragmentActivity { final String[] data = {"Hydrogen","Helium","Lithium","Beryllium","Boron","Carbon","Nitrogen","Oxygen","Flourine","Noen","Sodium","Magnesium","Aluminium","Silicon","Phosphorous","Sulphur","Chlorine","Argon","Potassium","Calcium","Scandium","Titanium","Vanadium","Chromium","Manganese","Iron","Cobalt","Nickel","Copper","Zinc","Gallium","Germanium","Arsenic","Selenium","Bromine","Krypton","Rubidium","Strontium","Yttrium","Zirconium","Niobium","Molybdenum","Technetium","Ruthenium","Rhodium","Palladium","Silver","Cadmium","Indium","Tin","Antimony","Tellurium"}; ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); final EditText searchBar = (EditText) findViewById(R.id.searchbar); final DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout); final ListView navList = (ListView) findViewById(R.id.left_drawer); final LinearLayout linearLayout = (LinearLayout)findViewById(R.id.left_drawer_layout); navList.setAdapter(adapter); searchBar.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { MainActivity.this.adapter.getFilter().filter(cs); } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } @Override public void afterTextChanged(Editable arg0) { } }); //the code below will automatically close the keyboard when the user will touch the listview navList.setOnScrollListener(new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(navList.getWindowToken(), 0); } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); } } 

Mainactivity.xml

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:background="#000000" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Swipe from the left to open the drawer" android:id="@+id/textView" android:layout_gravity="center" /> </FrameLayout> <LinearLayout android:id="@+id/left_drawer_layout" android:layout_height="fill_parent" android:layout_width="240dp" android:background="#111" android:orientation="vertical" android:layout_gravity="start" > <EditText android:id="@+id/searchbar" android:layout_width="230dp" android:layout_height="40dp" android:textColor="#bfc2d1" android:singleLine="true" android:padding="10dp" android:background="@drawable/search_bar" android:layout_marginLeft="3dp" android:layout_marginRight="3dp" android:imeOptions="flagNoExtractUi" android:hint=" search" > </EditText> <TextView android:id="@+id/notfound" android:layout_width="fill_parent" android:layout_height="fill_parent" style="@android:style/TextAppearance.Medium" android:gravity="center"> </TextView> <ListView android:id="@+id/left_drawer" android:layout_width="match_parent" android:layout_height="fill_parent" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#111"/> </LinearLayout> </android.support.v4.widget.DrawerLayout> 

Sí usted ha mencionado sobre setEmptyView () correctamente, usted debe utilizarlo si usted quisiera mostrar el mensaje vacío siempre que ListView consiga vacío.

Ahora aquí es un diseño xml y el código describe cómo usar setEmptyView exactamente.

 <LinearLayout android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/layoutTitlebar" > <ListView android:id="@+id/listViewFriends" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/friendBGColor" android:cacheColorHint="#00000000" > </ListView> <TextView android:id="@+id/empty" style="@android:style/TextAppearance.Large" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:text="@string/strNoRecordsFound" > </TextView> </LinearLayout> 

Ahora, usted tiene que establecer esta vista vacía (es decir, TextView) a ListView mediante:

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

Este método es todo lo que necesitas

http://developer.android.com/reference/android/widget/AdapterView.html#setEmptyView(android.view.View)

Tener en cuenta que acepta una vista, por lo que tiene que inflar el diseño y llenar cualquier / todo el texto que puede tener allí por ti mismo.

EDITAR:

Supongamos que tiene un diseño llamado "empty_text" como este:

 <?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="wrap_content"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="There are no entries in this list" android:gravity="center"/> </LinearLayout> 

Sugerencia: Me quemé en la cadena por propósitos de ejemplo, prestar atención a la advertencia de IDE y utilizar un identificador de cadena para el bien de I18n

Ahora usaría este código para hacer que todo funcionara con ListView:

 LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View emptyTextView = inflater.inflate(R.layout.empty_text, null, false); listView.setEmptyView(emptyTextView); 

Este código asume que se está ejecutando dentro de una Actividad, pero en caso de que no planifique pegarla en una Actividad, cualquier instancia de Contexto funcionará.

Eso debería ser.

 ListView lv = (ListView)findViewById(android.R.id.list); TextView emptyText = (TextView)findViewById(android.R.id.empty); lv.setEmptyView(emptyText); 

Entonces su listview utilizará automáticamente esta vista cuando su adaptador esté vacío.

Solución detallada:

Diseño:

 <ListView android:id="@+id/listViewFriends" android:layout_height="match_parent" android:layout_width="match_parent" android:background="@color/friendBGColor" android:cacheColorHint="#00000000"> </ListView> <TextView android:id="@+id/empty" android:text="@string/strNoRecordsFound" android:layout_width="fill_parent" android:layout_height="fill_parent" style="@android:style/TextAppearance.Large" android:gravity="center"> </TextView> </LinearLayout> 

Archivo de clase:

 ListView listViewFriends = (ListView) findViewById(R.id.listViewFriends); listViewFriends.setEmptyView(findViewById(R.id.empty)); 

Fuente

  • Cajón de navegación Elementos que no registran el evento de clic
  • Android: ¿es posible tener un ListView dentro de un ListView?
  • RadioButtons programáticamente agregados se niegan a obedecer la ponderación LayoutParams
  • ¿Cómo mostrar un ProgressBar en una vista mientras realizas algún trabajo?
  • Selector de ListView de Android Color
  • Android - Agregar y mostrar elementos a ListView uno a la vez usando un ArrayAdapter
  • Lista de visualización de Android usando expandibleListView
  • Cómo manejar onCheckedChangeListener para un RadioGroup en un adaptador ListView personalizado
  • La mejor manera de implementar un cajón de desplazamiento de navegación
  • CursorAdapter clasificación dinámica
  • BaseAdapter: set hasStableIds () a false?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.