9

Sto tentando di creare un numero personalizzato ArrayAdapter da utilizzare per il mio ListFragment. In questo momento non viene visualizzato nulla nello ListFragment tranne per il TextView che dice quale numero di Frammento è. Ho inserito un breakpoint nel metodo getView() del mio adattatore e non viene chiamato. Ho cercato motivi che non sarebbero stati chiamati e alcune persone sembrano pensare che il mio ListView sia nascosto, quindi ho provato a cambiare lo layout_height in wrap_content, ma non ha funzionato.Custom ArrayAdapter in a ListFragment

Inoltre, ho seguito il codice dalla pagina di questo sviluppatore: 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:

Ho creato ArrayAdapters personalizzati senza problemi, quindi c'è qualcosa che mi manca nel farli funzionare con un ListFragment?

risposta

6

La soluzione è che getCount() restituiva 0 per il mio ArrayAdapter. Quindi ho appena usato mAdapter.add(temp) e poi mAdapter.notifyDataSetChanged() e ha funzionato. Ho anche dovuto cambiare la linea row = inflater.inflate(R.id.pager, parent, false); a row = inflater.inflate(R.layout.listview_row, parent, false);

+1

Grazie. Ho avuto lo stesso problema ed è stato davvero in getCount(). È logico perché la classe estesa non usa gli elementi sovraccaricati, quindi non ne conosce la dimensione. –