9

Ich versuche, eine benutzerdefinierte ArrayAdapter für meine ListFragment zu erstellen. Im Moment wird nichts in der ListFragment mit Ausnahme der TextView angezeigt, welche Fragmentnummer es ist. Ich habe einen Breakpoint in getView() Methode meines Adapters gesetzt und es wird nicht aufgerufen. Ich suchte nach Gründen, die nicht aufgerufen werden würden und einige Leute scheinen zu denken, dass meine ListView versteckt ist, also habe ich versucht, die layout_height zu wrap_content zu ändern, aber das hat nicht funktioniert.Benutzerdefinierte ArrayAdapter in einer ListFragment

Auch ich habe nach dem Code auf dieser Seite des Entwicklers: 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:

Ich habe benutzerdefinierte ArrayAdapter vorher ohne Probleme gemacht, also fehlt mir etwas daran, sie mit einem ListFragment arbeiten zu lassen?

Antwort

6

Die Lösung ist, dass getCount() 0 für meine ArrayAdapter zurückgegeben wurde. Also habe ich gerade mAdapter.add(temp) und dann mAdapter.notifyDataSetChanged() verwendet und es hat funktioniert. Ich musste auch die Linie row = inflater.inflate(R.id.pager, parent, false); zu row = inflater.inflate(R.layout.listview_row, parent, false);

+1

Dank ändern. Ich hatte das gleiche Problem und es war wirklich in getCount(). Es ist logisch, weil die erweiterte Klasse Ihre überladenen Elemente nicht verwendet, so dass sie ihre Größe nicht kennt. –

Verwandte Themen