2014-02-19 16 views
2

我有一個ListView我填充使用自定義適配器。我想檢查ListView佈局中的條目,如果匹配,則將整行的背景顏色更改爲不同。我應該改變一個ListView行的背景自定義適配器或活動

是否建議在自定義適配器本身或主要活動中更改?

我目前正在改變自定義適配器中的背景顏色,出於某種原因,多行的背景顏色正在改變,並且如果我上下滾動ListView行,背景顏色更改切換到其他行。

如果需要,我可以將代碼發佈到我的自定義適配器。

我CustomAdapter類:

package com.test.testing; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Locale; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Color; 
import android.text.Spannable; 
import android.text.SpannableString; 
import android.text.TextUtils; 
import android.text.style.ForegroundColorSpan; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 

public class SetRowsCustomAdapter extends ArrayAdapter<SetRows> { 
    Context context; 
    int layoutResourceId; 
    ArrayList<SetRows> data=new ArrayList<SetRows>(); 
    DateFormat df = new SimpleDateFormat("EEEEE, LLLL d", Locale.US); 
    String[] suspendedDates = { 
      "Tuesday, January 1", 
      "Monday, January 20", 
      "Friday, January 31", 
      "Wednesday, February 12", 
      "Monday, February 17", 
      "Wednesday, March 5", 
      "Sunday, March 16", 
      "Tuesday, April 15", 
      "Wednesday, April 16", 
      "Thursday, April 17", 
      "Friday, April 18", 
      "Monday, April 21", 
      "Tuesday, April 22", 
      "Monday, May 26", 
      "Thursday, May 29", 
      "Wednesday, June 4", 
      "Thursday, June 5", 
      "Friday, July 4", 
      "Monday, July 28", 
      "Tuesday, July 29", 
      "Wednesday, July 30", 
      "Friday, August 15", 
      "Monday, September 1", 
      "Thursday, September 25", 
      "Friday, September 26", 
      "Saturday, October 4", 
      "Sunday, October 5", 
      "Monday, October 6", 
      "Thursday, October 9", 
      "Friday, October 10", 
      "Monday, October 13", 
      "Thursday, October 16", 
      "Friday, October 17", 
      "Thursday, October 23", 
      "Saturday, November 1", 
      "Tuesday, November 4", 
      "Tuesday, November 11", 
      "Thursday, November 27", 
      "Monday, December 8", 
      "Thursday, December 25" 
    }; 
    public SetRowsCustomAdapter(Context context, int layoutResourceId, ArrayList<SetRows> data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     ImageHolder holder = null; 

     if(row == null) 
     { 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 

      holder = new ImageHolder(); 
      holder.txtTitle = (TextView)row.findViewById(R.id.tvDateVal); 
      holder.txtDate = (TextView)row.findViewById(R.id.tvDateNum); 
      holder.txtID = (TextView)row.findViewById(R.id.tvReasonVal); 
      row.setTag(holder); 
     } 
     else 
     { 
      holder = (ImageHolder)row.getTag(); 
     } 

     SetRows myImage = data.get(position); 
     int inReason = myImage.name.indexOf(","); 
     String strR = myImage.name.substring(0, inReason); 
     Spannable WordToSpan = new SpannableString(strR); 
     WordToSpan.setSpan(new ForegroundColorSpan(Color.parseColor("#4787ED")), 0, WordToSpan.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
     String strRNext = myImage.name.substring(inReason, myImage.name.length()); 
     Spannable WordToSpan1 = new SpannableString(strRNext); 
     WordToSpan1.setSpan(new ForegroundColorSpan(R.color.dateholiday), 0, WordToSpan1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

     holder.txtTitle.setText(TextUtils.concat(WordToSpan, WordToSpan1)); 
     holder.txtID.setText(myImage.id); 
     holder.txtDate.setText(myImage.date); 
     if (myImage.name.contains(df.format(Calendar.getInstance(Locale.US).getTime()))) { 
      Toast.makeText(getContext(), String.valueOf(myImage.name.contains(df.format(Calendar.getInstance(Locale.US).getTime()))), 2000).show(); 
      row.setBackgroundColor(Color.parseColor("#F0DEEDF3")); 
     } 
     return row; 
    } 

    static class ImageHolder 
    { 
     TextView txtTitle; 
     TextView txtID; 
     TextView txtDate; 
    } 
} 

正如你可以看到我使用IF條件應該只允許一行如果遇到有背景顏色。

圖片:http://i59.tinypic.com/2wmhtht.png

圖片:http://i62.tinypic.com/9i7pjn.png

+0

顯示一些代碼!並確保您使用[ViewHolders](http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html) – Androiderson

+0

將代碼發佈到我的適配器類以及圖像 – SearchForKnowledge

+0

您也需要在getView方法中放入else條件。它應該包含以下幾行:'row.setBackgroundColor(<原始顏色的行或透明如果沒有)' – Vino

回答

1
Multiple changes occur because u probably do this in ur code. if(condition){// set bg}. 

    // you need to do 
    if(condition){// set bg} 
    else 
    { 
    // set bg to default 
    } 

if (myImage.name.contains(df.format(Calendar.getInstance(Locale.US).getTime()))) { 
      Toast.makeText(getContext(), String.valueOf(myImage.name.contains(df.format(Calendar.getInstance(Locale.US).getTime()))), 2000).show(); 
      row.setBackgroundColor(Color.parseColor("#F0DEEDF3")); 
     } 
else 
{ 
row.setBackgroundColor(Color.parseColor("#ur original color hex code here")); 
} 
+0

添加我的自定義適配器類和圖像查看 – SearchForKnowledge

+0

@ user3326071相同笏我猜ü需要重設背景 –

+0

WOW ......簡單的方法,但完全忘了這回事。我怎樣才能將它設置爲默認顏色? – SearchForKnowledge

1

如果你的目的是要改變各行我會通過適配器類調整顏色。否則使用Activity/Fragment來根據需要更改整個背景。

+0

我添加了我的適配器類。 – SearchForKnowledge

相關問題