2013-12-16 56 views
0

我的自定義適配器有問題。不調用getView()方法。我搜索了我的朋友「谷歌」和「stackoverflow」,但任何修復我的問題。getview不在BaseAdapter中調用

public class custom_adapter extends BaseAdapter { 
    private List<Activities> listData; 

    private LayoutInflater layoutInflater; 

    public custom_adapter(Context context, 
      List<Activities> listActivity) { 
     this.listData = listActivity; 
     layoutInflater = layoutInflater.from(context); 
     Log.v("BaseAdapter", "custom_adapter"); 
    } 


    @Override 
    public int getCount() { 
     Log.v("BaseAdapter - getCount", String.valueOf(listData.size())); 
     return listData.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return listData.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Log.v("BaseAdapter", "getView"); 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = layoutInflater.inflate(R.layout.custom_adapter, null); 
      holder = new ViewHolder(); 
      holder.name = (TextView) convertView.findViewById(R.id.title); 
      holder.ratingBar = (RatingBar) convertView.findViewById(R.id.averageRatingBarActivitySearch); 
      holder.imageView = (ImageView) convertView.findViewById(R.id.thumbImage); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     Activities newsItem = (Activities) listData.get(position); 

     holder.name.setText(newsItem.getName()); 
     holder.ratingBar.setRating(newsItem.getAverageMark()); 

     if (holder.imageView != null) { 
      new ImageDownloaderTask(holder.imageView).execute(newsItem.getPictureActivityString()); 
     } 

     return convertView; 
    } 


    public static class ViewHolder { 
     TextView name; 
     RatingBar ratingBar; 
     ImageView imageView; 
    } 


} 

此外,GetCount不爲空!

我會很空地,如果你能幫助我

問候

K.L

+2

您是否將您的適配器設置爲ListView? –

+1

要麼是上面的答案,要麼你listData.size()返回0 –

+0

發表你的listview xml部分 –

回答

2

對於處理某些對象的列表,擴展通用ArrayAdapter可能是更好的選擇,而不是僅僅BaseAdapter目的。它會爲你處理很多事情。您的整個適配器類可能看起來像。

public class ActivitiesAdapter extends ArrayAdapter<Activities> 
{ 
private LayoutInflater layoutInflater; 

public ActivitiesAdapter(Context context, List<Activities> objects) 
{ 
    super(context, 0, objects); 

    layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Log.v("BaseAdapter", "getView"); 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = layoutInflater.inflate(R.layout.custom_adapter, null); 
     holder = new ViewHolder(); 
     holder.name = (TextView) convertView.findViewById(R.id.title); 
     holder.ratingBar = (RatingBar) convertView.findViewById(R.id.averageRatingBarActivitySearch); 
     holder.imageView = (ImageView) convertView.findViewById(R.id.thumbImage); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    Activities newsItem = getItem(position); 

    holder.name.setText(newsItem.getName()); 
    holder.ratingBar.setRating(newsItem.getAverageMark()); 

    if (holder.imageView != null) { 
     new ImageDownloaderTask(holder.imageView).execute(newsItem.getPictureActivityString()); 
    } 

    return convertView; 
} 


public static class ViewHolder { 
    TextView name; 
    RatingBar ratingBar; 
    ImageView imageView; 
} 
} 

當然,您必須將此適配器設置爲您的ListView實例。像

ActivitiesAdapter adapter = new ActivitiesAdapter(this, yourActivitiesList); 
ListView listView = (ListView)findViewById(R.id.my_list_id); 
listView.setAdapter(adapter); 

或者乾脆setListAdapter(adapter);如果您正在使用ListActivityListFragment;

+1

非常感謝,問題不在於我的custom_adapter類,而是在我的listView.I中使用listView.setAdapter(adapter)而不是setListAdapter(適配器); – user3108740

+0

你必須調用「super();」方法在你的數組適配器的構造函數中。你沒有調用它,這就是爲什麼getView()方法沒有調用。 –

0

我有同樣的問題。也許,問題是你沒有通知你的適配器,你已經改變了適配器中的數據。試試這個代碼在適配器:

@Override 
public int getCount() { 
    return data.size(); 
} 

並調用notifyDataSetChanged();當您更改適配器的數據。

相關問題