Cómo utilizar setEmptyView () con el diseño de lista personalizada en ListFragment

Estoy usando un paginador con algunos Fragments .

Quiero mostrar un mensaje cuando no hay entradas en la lista ( Fragment ).

Intenté utilizar Textview con android:id="@id/android:empty pero no funciona.

Código de diseño de listas personalizadas:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="@dimen/padding_medium" > <TextView android:id="@+id/label_value" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="@dimen/padding_medium" android:text="@string/label_value" android:textColor="@android:color/white" android:textSize="18sp" /> <TextView android:id="@+id/label_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="@dimen/padding_medium" android:text="@string/title_time" android:textColor="@android:color/white" android:textSize="16sp" /> </RelativeLayout> 

Clase de adaptador de lista:

 public class JournalAdapter extends ArrayAdapter<String> { private final Context context; private final List<String> values; private final List<String> dates; public JournalAdapter(Context context, List<String> values, List<String> dates) { super(context, R.layout.layout_journal_list, values); this.context = context; this.values = values; this.dates = dates; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.layout_journal_list, parent, false); TextView value = (TextView) rowView.findViewById(R.id.label_glucose); TextView date = (TextView) rowView.findViewById(R.id.label_date); value.setText(values.get(position)); date.setText(dates.get(position)); return rowView; } } 

Método de análisis de lista:

 private void initListView() { values = dataSource.getAllValues(); List<String> values = new ArrayList<String>(); List<String> dates = new ArrayList<String>(); for (Value value : values) { values.add(Double.toString(value.getValue())); dates.add(secondsToDate(value.getDate())); } setListAdapter(new JournalAdapter(context, values, dates)); listView = getListView(); listView.setEmptyView(noItems("NO ITEMS")); listView.setOnItemClickListener(this); } 

Método noItems :

 private TextView noItems(String text) { TextView emptyView = new TextView(context); emptyView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); emptyView.setText(text); emptyView.setTextColor(Color.WHITE); emptyView.setTextSize(20); emptyView.setVisibility(View.GONE); emptyView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); return emptyView; } 

2 Solutions collect form web for “Cómo utilizar setEmptyView () con el diseño de lista personalizada en ListFragment”

Esto funcionó para mí (tengo la solución de esta pregunta formulada por William Remacle ). Lo que puede haber perdido es agregar el TextView creado al padre de diseño ListView (segunda línea de código de la parte inferior del método noItems continuación):

En mi ListFragment he utilizado el siguiente método para obtener una vista para la vista vacía:

 private TextView noItems(String text) { TextView emptyView = new TextView(getActivity()); //Make sure you import android.widget.LinearLayout.LayoutParams; emptyView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); //Instead of passing resource id here I passed resolved color //That is, getResources().getColor((R.color.gray_dark)) emptyView.setTextColor(getResources().getColor(R.color.gray_dark)); emptyView.setText(text); emptyView.setTextSize(12); emptyView.setVisibility(View.GONE); emptyView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); //Add the view to the list view. This might be what you are missing ((ViewGroup) getListView().getParent()).addView(emptyView); return emptyView; } 

A continuación, en el método onStart() del ListFragment establezca la vista vacía:

 @Override public void onStart() { super.onStart(); getListView().setEmptyView( noItems(getResources().getString(R.string.widget_empty))); } 
  android:id="@android:id/empty" 

y no

  android:id="@id/android:empty" 
  • Cuando se utiliza un proyecto de biblioteca de Android, ¿cómo se hace referencia a los recursos xml correctamente?
  • El azulejo estirable a veces estira
  • Org.eclipse.swt.SWTException: "Widget está eliminado" al intentar abrir AndroidManifest.xml
  • Cómo agregar una pista en spinner en XML
  • ¿Por qué SwitchPreference no muestra animación al cambiar de encendido a apagado y viceversa?
  • Color del fondo de la tostada que es cambiado
  • ¿Cómo pasar una ruta de acceso de archivo que está en la carpeta assets a File (String path)?
  • Error al agregar tema personalizado a la aplicación
  • Emoji símbolo 👍 en string.xml bloquea la aplicación
  • ¿Definir el logotipo personalizado para ActionBar (diferente de Logo) en XML?
  • El desplazamiento de texto no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.