Rellenar lista de vista personalizada mediante ListFragment

Estoy tratando de mostrar elementos en una vista de lista con Fragmentos. He creado mi vista personalizada como sigue

Representación gráfica de list_row.xml

Introduzca aquí la descripción de la imagen

List_row.xml

<?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="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="5dip" > <!-- ListRow Left sied Thumbnail image --> <LinearLayout android:id="@+id/thumbnail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginRight="5dip" android:padding="3dip" > <ImageView android:id="@+id/list_image" android:layout_width="50dip" android:layout_height="50dip" android:contentDescription="@string/image_desc"/> </LinearLayout> <!-- Menu name --> <TextView android:id="@+id/menu_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/thumbnail" android:layout_toRightOf="@+id/thumbnail" android:text="@string/menu_name" android:textColor="#040404" android:textSize="15sp" android:textStyle="bold" android:typeface="sans" /> <!-- Description --> <TextView android:id="@+id/description" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignBottom="@+id/thumbnail" android:layout_below="@id/menu_name" android:layout_marginTop="1dip" android:layout_toRightOf="@+id/thumbnail" android:text="@string/description" android:textColor="#343434" android:textSize="10sp" tools:ignore="SmallSp" /> <!-- Price --> <TextView android:id="@+id/price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignTop="@id/menu_name" android:layout_marginRight="5dip" android:gravity="right" android:text="@string/price" android:textColor="#10bcc9" android:textSize="10sp" android:textStyle="bold" tools:ignore="SmallSp" /> </RelativeLayout> 

En el archivo fragment.xml, simplemente coloco una vista de lista dentro de un diseño lineal

Fragmento.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout> 

Tengo una matriz de objetos de menú, que tiene los campos necesarios para rellenar list_row.xml como nombre de menú, descripción, precio e imagen. No pude encontrar una forma de rellenar listView de fragment.xml con los elementos list_row. Cualquier ayuda o idea sería apreciada.

PS: Creo que en fragment.xml en lugar de android:id="@+id/listView1" campo, tengo que escribir android:id="@id/list" ya que estoy usando ListFragment

He resuelto mi problema (como sugiere system32 en comentario) la creación de una clase CustomArrayAdapter, y la configuración como el adaptador para mi listView.

Primero cambié android:id="@+id/listView1" a android:id="@android:id/list" en fragmento.xml.

CustomArrayAdapter.java

 public class CustomArrayAdapter extends ArrayAdapter<Menu> { Context context; public CustomArrayAdapter(Context context, int textViewResourceId, List<Menu> objects) { super(context, textViewResourceId, objects); // TODO Auto-generated constructor stub this.context = context; } /*private view holder class*/ private class ViewHolder { ImageView imageView; TextView txtMenuName; TextView txtMenuDesc; TextView txtPrice; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; Menu rowItem = getItem(position); LayoutInflater mInflater = (LayoutInflater) context .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); if (convertView == null) { convertView = mInflater.inflate(R.layout.list_row, null); holder = new ViewHolder(); holder.txtMenuName = (TextView) convertView.findViewById(R.id.menu_name); holder.txtMenuDesc = (TextView) convertView.findViewById(R.id.description); holder.txtPrice = (TextView) convertView.findViewById(R.id.price); holder.imageView = (ImageView) convertView.findViewById(R.id.list_image); convertView.setTag(holder); } else holder = (ViewHolder) convertView.getTag(); holder.txtMenuDesc.setText(rowItem.getDescription()); holder.txtMenuName.setText(rowItem.getName()); holder.txtPrice.setText(String.valueOf(rowItem.getPrice()) + " TL"); //holder.imageView.setImageResource(rowItem.getImageId()); return convertView; } } 

Entonces lo uso en mi clase de Fragmento

  public static class Fragment extends ListFragment { /** * The fragment argument representing the section number for this * fragment. */ public static final String ARG_SECTION_NUMBER = "section_number"; private ListView listView; private ArrayList<Menu> menuItems; private CustomArrayAdapter mAdapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment, container, false); listView = (ListView) rootView.findViewById(android.R.id.list); return rootView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); int num = getArguments().getInt(ARG_SECTION_NUMBER); // GlobalList is a class that holds global variables, arrays etc // getMenuCategories returns global arraylist which is initialized in GlobalList class menuItems = GlobalList.getMenuCategories().get(num).getMenu(); mAdapter = new CustomArrayAdapter(getActivity(), android.R.id.list, menuItems); listView.setAdapter(mAdapter); } } 
  • Soporte para diferentes resoluciones android
  • Android AlertDialog reglas setView
  • Lona transparente para Android con transparencia
  • Mapa de bits no dibujado anti-alias
  • No se encontró ningún recurso que coincida con el nombre dado '@ style / Widget.RatingBar.Small'
  • Vista personalizada CustomView no utiliza los constructores de vista de 2 o 3 argumentos
  • Vista circular personalizada
  • Lazy carga de GridView con imágenes de descarga de Internet
  • Vista avanzada de la lista personalizada
  • Llamado al método onDraw () de una vista personalizada en Android
  • Cómo inclinar un diseño infantil en algún ángulo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.