2015-08-13 80 views
0

我的ListView有問題,特別是在getView中。在我的Article對象中,我包含一個布爾參數,對象文本的顏色取決於參數。但是,在屏幕上顯示對象文本顏色時,僅取決於兩個第一個對象。例如,fisrt obeject包含「true」參數,第二個包含「false」參數,所有下一個obects在「true」/「false」查詢中都有自己的參數,儘管所有下一個對象只包含「false」參數。 其他內容的對象是好的,並顯示良好。ListView在滾動上的位置

這是我的getView方法。在那裏我標記了我的Log.d命令。而滾動我得到這個,它只是滾動到第三個對象連續:

08-13 12:20:51.538 21990-21990/md.mybebe.mybebe D/readCUstom﹕ 512 true 
08-13 12:20:51.568 21990-21990/md.mybebe.mybebe D/readCUstom﹕ 510 false 
08-13 12:20:51.588 21990-21990/md.mybebe.mybebe D/readCUstom﹕ 512 true 
08-13 12:20:51.618 21990-21990/md.mybebe.mybebe D/readCUstom﹕ 510 false 
08-13 12:20:53.460 21990-21990/md.mybebe.mybebe D/readCUstom﹕ 508 false 
08-13 12:20:54.511 21990-21990/md.mybebe.mybebe D/readCUstom﹕ 512 true 
08-13 12:20:54.561 21990-21990/md.mybebe.mybebe D/readCUstom﹕ 510 false 
08-13 12:20:54.591 21990-21990/md.mybebe.mybebe D/readCUstom﹕ 512 true 
08-13 12:20:54.621 21990-21990/md.mybebe.mybebe D/readCUstom﹕ 510 false 

public View getView(final int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 
    Typeface robotoRegular = Typeface.createFromAsset(activity.getAssets(),"font/Roboto-Regular.ttf"); 
    Typeface robotoBold = Typeface.createFromAsset(activity.getAssets(),"font/Roboto-Bold.ttf"); 

    View rowView = convertView; 
    if (rowView == null) { 
     LayoutInflater inflater = activity.getLayoutInflater(); 

     DisplayMetrics dm = new DisplayMetrics(); 
     ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm); 

     if (dm.widthPixels <= 480) { 
      rowView = inflater.inflate(R.layout.list_row_little_width, parent, false); 
     } else { 
      rowView = inflater.inflate(R.layout.list_row, parent, false); 
     } 

     if (imageLoader == null) imageLoader = AppController.getInstance().getImageLoader(); 

     holder = new ViewHolder(); 

     holder.thumbNail = (NetworkImageView) rowView.findViewById(R.id.thumbnail); 

     holder.title = (TextView) rowView.findViewById(R.id.title); 
     holder.title.setTypeface(robotoBold); 

     holder.description = (TextView) rowView.findViewById(R.id.description); 
     holder.description.setTypeface(robotoRegular); 


     rowView.setTag(holder); 
    } else { 
     holder = (ViewHolder) rowView.getTag(); 
    } 

    ---->> Log.d("readCUstom", articleItems.get(position).getId()+ " " +articleItems.get(position).isRead()); 
    if (articleItems.get(position).isRead()) { 
     holder.title.setTextColor(Color.argb(100, 0, 0, 0)); 
     holder.description.setTextColor(Color.argb(100, 0, 0, 0)); 
    } 

    final Button readMoreButton = (Button) rowView.findViewById(R.id.readMoreButton); 
    readMoreButton.setTypeface(robotoBold); 

    ImageButton toShare = (ImageButton) rowView.findViewById(R.id.toShareButton); 
    toAddToFavorite = (ImageButton) rowView.findViewById(R.id.toAddToFavoriteButton); 

    SharedPreferences mSettings = activity.getSharedPreferences(LoginActivity.APP_PREFERENCES, Context.MODE_PRIVATE); 
    int userID = mSettings.getInt(LoginActivity.APP_PREFERENCES_PROFILE_ID,0); 

    if(articleItems.get(position).isFavorite() & userID != 0) toAddToFavorite.setImageResource(R.drawable.ic_star); 
    else toAddToFavorite.setImageResource(R.drawable.ic_star_outline); 

    // getting movie data for the row 
    final Article article = articleItems.get(position); 

    final View view = rowView; 

    rowView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      readMoreButton.performClick(); 
      readMoreButton.setPressed(true); 
      view.setSelected(true); 


     } 
    }); 

    URLImageParser p = new URLImageParser(holder.description, rowView.getContext(), activity); 
    String html = article.getDescription(); 
    MyHtmlTagHandler tagHandler = new MyHtmlTagHandler(); 
    Spanned htmlSpan = Html.fromHtml(html, p, tagHandler); 

    // thumbnail image 
    holder.thumbNail.setImageUrl(article.getThumbnailUrl(), imageLoader); 

    // title 
    holder.title.setText(TextUtils.htmlEncode(article.getTitle())); 

    // description 
    holder.description.setText(htmlSpan); 

    toShare.setOnClickListener(toShareOnClickListener(article, position)); 
    toAddToFavorite.setOnClickListener(toAddToFavoriteListener(position)); 

    // button read more 
    readMoreButton.setOnClickListener(readMoreClickListener(position)); 

    return view; 
} 

回答

1

適配器重用視圖。所以,如果你爲某一行增加顏色,當你重複使用這一行時,顏色的改變將會持續。

您應該始終將顏色設置爲所需的顏色。添加此行:

if (articleItems.get(position).isRead()) { 
    holder.title.setTextColor(Color.argb(100, 0, 0, 0)); 
    holder.description.setTextColor(Color.argb(100, 0, 0, 0)); 
} else { 
    holder.title.setTextColor(your default color); 
    holder.description.setTextColor(your default color); 
} 
1

嘗試設置其他顏色[其他]:

if (articleItems.get(position).isRead()) { 
     holder.title.setTextColor(Color.argb(100, 0, 0, 0)); 
     holder.description.setTextColor(Color.argb(100, 0, 0, 0)); 
    }else{ 
     holder.title.setTextColor(Color.argb(100, 100, 0, 0)); 
     holder.description.setTextColor(Color.argb(100, 100, 0, 0)); 
    } 
相關問題