Llenar la lista de vista personalizada utilizando ListFragment

Estoy tratando de mostrar elementos en una vista de lista usando Fragmentos. Creé mi vista personalizada de la siguiente manera

representación gráfica de list_row.xml

enter image description here

list_row.xml

             

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

fragment.xml

     

Tengo una matriz de objetos de menú, que tiene los campos necesarios para poblar list_row.xml, como el nombre del menú, la descripción, el precio y la imagen. No pude encontrar una forma de rellenar la lista de fragmentos.xml con los elementos list_row. Cualquier ayuda o idea sería apreciada.

PD: creo que en el campo fragment.xml en lugar de android:id="@+id/listView1" , tengo que escribir android:id="@id/list" porque estoy usando ListFragment

Resolví mi problema (como System32 sugiere al comentar) creando una clase CustomArrayAdapter y configurándola como el adaptador para mi listView.

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

CustomArrayAdapter.java

 public class CustomArrayAdapter extends ArrayAdapter { Context context; public CustomArrayAdapter(Context context, int textViewResourceId, List 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; } } 

Luego lo uso en mi clase Fragment

  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 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); } }