9

Estoy tratando de crear un ArrayAdapter personalizado para usarlo en mi ListFragment. En este momento, no se muestra nada en el ListFragment excepto en el TextView que dice el número de Fragmento que es. He puesto un punto de interrupción en el método getView() de mi adaptador y no se está llamando. Busqué las razones que no se llamarían y algunas personas parecen pensar que mi ListView está oculto, así que he intentado cambiar el layout_height al wrap_content, pero eso no funcionó.Custom ArrayAdapter en un ListFragment

Además, he estado siguiendo el código de la página de este desarrollador: http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html

ListFragment:

public class HomeFragment extends ListFragment implements FragmentTitle 
{ 
private int mNum = 0; 
private String mTitle = "Home"; 
private ListView mListView; 
private MyArrayAdapter mAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    mNum = getArguments() != null ? getArguments().getInt("num") : 1; 
    InfoContainer temp = new InfoContainer("test1", "test2"); 
    mAdapter = new MyArrayAdapter(getActivity(), android.R.id.list, temp); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View v1 = inflater.inflate(R.layout.fragment_pager_list, container, false); 
    TextView tv = (TextView) v1.findViewById(R.id.text); 
    tv.setText("Fragment #" + mNum); 
    mListView = (ListView) v1.findViewById(android.R.id.list); 
    return v1; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 
    mListView.setAdapter(mAdapter); 
} 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) 
{ 
    Log.i("HomeFragment", "Item clicked: " + id); 
} 

public CharSequence getTitle() 
{ 
    return mTitle; 
} 

} 

ArrayAdapter:

public class MyArrayAdapter extends ArrayAdapter<InfoContainer> 
{ 
Context mContext; 
InfoContainer data; 

public MyArrayAdapter(Context context, int textViewResourceId, InfoContainer temp) 
{ 
    super(context, textViewResourceId); 
    mContext = context; 
    this.data = temp; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    View row = convertView; 
    ViewHolder holder = new ViewHolder(); 

    if(row == null) 
    { 
     LayoutInflater inflater = ((Activity)mContext).getLayoutInflater(); 
     row = inflater.inflate(R.id.pager, parent, false); 
     holder.v1 = (TextView) row.findViewById(R.id.listview_name); 
     holder.v2 = (TextView) row.findViewById(R.id.listview_data); 
     row.setTag(holder); 
    } 
    else 
    { 
     holder = (ViewHolder) row.getTag(); 
    } 
    InfoContainer info = data; 
    holder.v1.setText(info.name); 
    holder.v2.setText(info.text); 
    return row; 
} 

public static class ViewHolder 
{ 
    TextView v1; 
    TextView v2; 
} 

} 

fragment_pager_list.xml:

He hecho ArrayAdapters personalizados antes sin ningún problema, entonces ¿hay algo que me falta para que funcionen con un ListFragment?

Respuesta

6

La solución es que getCount() devolvió 0 para mi ArrayAdapter. Así que acabo de usar mAdapter.add(temp) y luego mAdapter.notifyDataSetChanged() y funcionó. También tuve que cambiar la línea row = inflater.inflate(R.id.pager, parent, false); a row = inflater.inflate(R.layout.listview_row, parent, false);

+1

Gracias. Tuve el mismo problema y realmente estaba en getCount(). Es lógico porque la clase extendida no utiliza sus elementos sobrecargados, por lo que no conoce su tamaño. –

Cuestiones relacionadas