2013-12-16 5 views
0

사용자 정의 어댑터에 문제가 있습니다. getView() 메소드가 호출되지 않습니다. 내 친구들 "google"과 "stackoverflow"에서 검색했지만 내 문제를 해결하는 것은 없습니다.BaseAdapter에서 getview가 호출되지 않습니다.

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가 null이 아닙니다! 당신이 일반적인 ArrayAdapter가 대신 BaseAdapter의 더 나은 선택이 될 수 확장, 일부 개체의 목록을 처리 할 목적으로 나를

감사

K.L

+2

어댑터를 ListView로 설정 했습니까? –

+1

답변이 위의 경우 또는 listData.size()가 0을 반환하는 경우 –

+0

listview xml 부분 게시 –

답변

2

를 도울 수 있다면

나는 매우 빈터 될 것입니다. 그것은 당신을 위해 많은 것들을 처리 할 것입니다. 전체 어댑터 클래스는 다음과 같이 보일 수 있습니다.

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); 당신이 ListActivity 또는 ListFragment을 사용하는 경우처럼,

+1

문제가 내 custom_adapter 클래스에는 없지만 listView.I listView.setAdapter (adapter)를 사용합니다. 대신에 setListAdapter (어댑터); – user3108740

+0

"super();"라고 불러야합니다. 메서드를 배열 어댑터의 생성자에 추가합니다. getView() 메소드가 호출하지 않은 이유를 호출하지 않았다. –

0

같은 문제가있었습니다. 어댑터의 데이터를 변경했음을 어댑터에 알리지 않는 것이 문제 일 수 있습니다. 어댑터에이 코드를보십시오 :

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

그리고 당신은 어댑터의 데이터를 변경할 때 notifyDataSetChanged();를 호출합니다.

관련 문제