2016-05-02 10 views
0

getView()メソッドが完全に理解できません。ここでgetView()でブール変数を使用できません

enter image description here

私はあなたが見ることができる偽のisNoticeReadを持っている:ここではケースです。しかし、その行は処刑される! if文の行が実行されていると、isNoticeReadはどこにも見つかりません!カーソルを上に置いても、何も起こりません(ツールチップなし)。そして、最初のitemListViewです。何が欠けているのか教えていただけますか?

マイフルAdapter

public class NoticesListViewAdapter extends BaseAdapter{ 

    Context context; 
    ArrayList<NoticeModel> items; 
    String[] readNotices; 

    public NoticesListViewAdapter(Context context, ArrayList<NoticeModel> items) { 
     this.context         = context; 
     this.items          = items; 
     readNotices          = SharedPrefUtils.getMarkedNotices(context).split(SharedPrefUtils.SEPARATOR_READ_NOTICE); 
    } 

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

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Holder holder; 
     if(convertView == null){ 
      convertView         = LayoutInflater.from(context).inflate(R.layout.list_item_notices, null); 
      holder          = new Holder(); 
      holder.noticeID        = (TextView) convertView.findViewById(R.id.noticeID); 
      holder.tvNotice        = (TextView) convertView.findViewById(R.id.tvNotice); 
      holder.tvDateTime       = (TextView) convertView.findViewById(R.id.tvDateTime); 
      holder.tvNoticeRead       = (TextView) convertView.findViewById(R.id.tvNoticeRead); 
      convertView.setTag(holder); 
     }else{ 
      holder          = (Holder) convertView.getTag(); 
     } 
     try { 
      String str = items.get(position).getId() + ""; 
      holder.noticeID.setText(str); 
      holder.tvNotice.setText(items.get(position).getText()); 
      holder.tvDateTime.setText(DateTimeUtils.changeDateTimeFormat(items.get(position).getDateTime(), DateTimeUtils.FORMAT8, DateTimeUtils.FORMAT3)); 

      final boolean isNoticeRead = items.get(position).isRead(); 
      if (isNoticeRead) { 
       holder.tvNoticeRead.setVisibility(View.VISIBLE); 
      } 

     //  for(String s : readNotices) { 
     //   if (s.equals(str)) { 
     //    holder.tvNoticeRead.setVisibility(View.VISIBLE); 
     ////    break; 
     //   } 
     //  } 
     }catch (Exception e){e.printStackTrace();} 

     return convertView; 
    } 

    class Holder{ 
     TextView tvNotice, tvDateTime, noticeID, tvNoticeRead; 
    } 
} 

答えて

3

あなたのホルダーのビューが一覧で再使用されています。したがって、VISIBLEで初期化されたインスタンスがあるかもしれませんが、ビューが再利用されて塗りつぶされると、状態はリセットされません。

if (isNoticeRead) { 
    holder.tvNoticeRead.setVisibility(View.VISIBLE); 
} else { 
    holder.tvNoticeRead.setVisibility(View.INVISIBLE); 
} 
+0

これは正しいです。この@CoolBrainを試してみてください。 –

0

最後に変数を作成すると、実行中に値を割り当てることができません。これは、finalをfinal削除するか、isNoticeReadをfieldとして定義するためです。 それはあなたのためにうまくいくかもしれません..

関連する問題