2013-12-16 54 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();当您更改适配器的数据。

相关问题