2012-05-14 2 views
1

항목 목록을 표시하는 ListActivity가 있고 각 항목의 오른쪽 끝에 ImageView가 있으며 시작 부분에 화살표 아이콘이 표시되어 있습니다. 특정 버튼 이 화살표 아이콘을 삭제 아이콘으로 대체하고 싶습니다.이 경우 ListView의 ArrayAdapter를 변경하고 notifyDataSetChanged()를 호출했습니다 .ArrayAdapter의 getView 메소드에서 ImageView의 ImageResource를 설정했지만 변경 사항이 표시되지 않습니다. 첫 번째 항목 만 아이콘이 변경되었습니다.android의 사용자 정의 ArrayAdapter는 ListActivity에서만 첫 번째 항목의 뷰를 업데이트합니다.

CCAdapter mAdapter=new CCAdapter(context, R.layout.lisitem, CCS,2); 
      MyList.this.setListAdapter(mAdapter); 
        mAdapter.notifyDataSetChanged(); 
      MyList.this.getListView().invalidateViews(); 

을하지만 목록이 단지 1 항목을 수행 한 후 삭제를 다음 내가 할 단추의 OnClick 방법에

private class CCAdapter extends ArrayAdapter<CCcenter>{ 

    ArrayList<CCcenter> items; 
    int mode; 
    public CCAdapter(Context context, int textViewResourceId, ArrayList<CCcenter> Items,int m) { 
     super(context, textViewResourceId, Items); 
     this.items=Items; 
     this.mode=m; 
     // TODO Auto-generated constructor stub 
    } 



    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
      View v = convertView; 
      if (v == null) { 
       LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.lisitem, null); 
      } 
      final CCcenter o = items.get(position); 
      if (o != null) { 

        TextView title = (TextView) v.findViewById(R.id.ttl_txt); 
        TextView desc=(TextView)v.findViewById(R.id.desc_txt); 
        TextView dist=(TextView)v.findViewById(R.id.dist_txt); 
        ImageView icon=(ImageView)findViewById(R.id.lst_icon); 
        RatingBar rating=(RatingBar)findViewById(R.id.lst_ratings); 

        if(title!=null) 
        { 
         title.setText(o.title); 
        } 
        if(desc!=null) 
        { 
         desc.setText(o.desc); 
        } 
        if(dist!=null) 
        { 
         dist.setText(o.dist); 
        } 
        if(rating!=null) 
        { 
         rating.setRating(o.rating); 
        } 
        if(icon!=null) //edit mode 
        { 
         if(this.mode==1) 
         { 
          icon.setImageResource(R.drawable.arrow); 
         } 
         else 
         { 
          icon.setImageResource(R.drawable.dlet); 
         } 
        } 
      } 
      return v; 
    } 

} 

: 여기

는 ArrayAdapter와 코드 다른 사람들은 기본 화살표 아이콘을 보여줍니다. 내가 뭘 잘못하고 있니? 당신은 선언 한

final CCcenter o = items.get(position); 

이 설정되고 나면 그 값이 처음 당신이되고 함께 붙어있어 그래서 최종 ... 혹시, 변경할 수 없습니다 : 내 생각

답변

0

이 문제입니다 양수인. 그래서 나는 당신의 목록이 같은 품목을 계속해서 또 다시 보여주지 않는 것을 놀라게합니다.

최종 선언을 제거하고 어떤 결과가 나타나는지보십시오. 검색되는 코드 RatingBar와 이미지 뷰에

public View getView(int position, View convertView, ViewGroup parent) 
{ 
    View v = convertView; 
    viewHolder holder; 
    if (v == null) 
    { 
     holder=new ViewHolder(); 
     LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.lisitem, null); 
     holder.title = (TextView) v.findViewById(R.id.ttl_txt); 
     holder.desc=(TextView)v.findViewById(R.id.desc_txt); 
     holder.dist=(TextView)v.findViewById(R.id.dist_txt); 
     holder.icon=(ImageView)findViewById(R.id.lst_icon); 
     holder.rating=(RatingBar)findViewById(R.id.lst_ratings); 
     v.setTag(holder); 
    } 
    else 
    { 
     holder=(ViewHolder)v.getTag(); 
    } 
    CCcenter o = items.get(position); 
    if(title!=null) 
    { 
     holder.title.setText(o.title); 
    } 
    if(desc!=null) 
    { 
     holder.desc.setText(o.desc); 
    } 
    if(dist!=null) 
    { 
     holder.dist.setText(o.dist); 
    } 
    holder.rating.setRating(o.rating); 
    if(this.mode==1) 
    { 
     holder.icon.setImageResource(R.drawable.arrow); 
    } 
    else 
    { 
     holder.icon.setImageResource(R.drawable.dlet); 
    } 
    return v; 
} 
+0

여전히 문제가 발생하지 않습니다. – Mehedi

0

는 내부 정적 클래스는 다음과 같은의 getView 사용 뭔가

static class viewHolder{ 
TextView title ; 
TextView desc; 
TextView dist; 
ImageView icon; 
RatingBar rating; 

} 

처럼 뷰의에 refrence를 개최 할 수 있도록 like

ImageView icon=(ImageView) findViewById(R.id.lst_icon); 
RatingBar rating=(RatingBar) findViewById(R.id.lst_ratings); 

그러나 이것들은 다음과 같이 이루어져야합니다.

ImageView icon=(ImageView) v.findViewById(R.id.lst_icon); 
RatingBar rating=(RatingBar) v.findViewById(R.id.lst_ratings); 
+0

작동하지 않습니다. – Mehedi

관련 문제