我有一個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
顯示一些代碼!並確保您使用[ViewHolders](http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html) – Androiderson
將代碼發佈到我的適配器類以及圖像 – SearchForKnowledge
您也需要在getView方法中放入else條件。它應該包含以下幾行:'row.setBackgroundColor(<原始顏色的行或透明如果沒有)' – Vino