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" 
  • Placeholder Fragmento / Actividad principal android.view.InflateException
  • Líneas de alineación izquierda y derecha dentro de Listview?
  • Volver a la actividad principal al presionar el botón del icono de la aplicación
  • ¿Cómo oriento la resolución 1280x720 WXGA720 (como el nuevo Galaxy Nexus) en las carpetas de diseño Android?
  • Cambiar (Pulgar y Seguir) Android
  • Error al intentar probar AnimatedVectorDrawable, "No se puede cambiar de x a z"
  • Cómo solucionar el error: No se pudo encontrar el método onClick (View) en un padre o ancestro Contexto para android: onClick
  • Eclipse no muestra errores de XML
  • Hacer texto en negrita y cursiva
  • Estilo PopupMenu Android
  • Crear Circular y Transparente Drawable XML Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.