我有一个 ListView
,我使用自定义适配器填充它。我想检查 ListView
布局中的条目,如果匹配,则将整行的背景颜色更改为不同的颜色。
是否建议在自定义适配器本身或主要 Activity 中进行更改?
我目前正在更改自定义适配器中的背景颜色,由于某种原因,多行的背景颜色正在更改,并且如果我上下滚动背景颜色更改的 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 条件,如果满足,该条件应该只允许一行具有背景颜色。
最佳答案
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"));
}
关于android - 我应该在自定义适配器或 Activity 中更改 ListView 行的背景吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21869517/