我通过google和stackoverflow进行了修改..
Android - ListView with 2 different Colors
我发现这篇文章对改变背景颜色很有用..但是如果我想根据逻辑改变背景颜色呢?
例如我的代码已经设置了convertView。如下所示
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null)
convertView = inflater.inflate(R.layout.rest_list, null);
TextView id = (TextView)convertView.findViewById(R.id.id); // title
TextView name = (TextView)convertView.findViewById(R.id.name); // artist name
TextView area = (TextView)convertView.findViewById(R.id.area); // duration
TextView type = (TextView)convertView.findViewById(R.id.type); // duration
ImageView image=(ImageView)convertView.findViewById(R.id.image); // thumb image
HashMap<String, String> restaurant = new HashMap<String, String>();
restaurant = data.get(position);
// Setting all values in listview
if(name != null){
id.setText(restaurant.get(RestaurantList.TAG_ID));
name.setText(restaurant.get(RestaurantList.TAG_NAME));
area.setText(restaurant.get(RestaurantList.TAG_AREA));
type.setText(restaurant.get(RestaurantList.TAG_TYPE));
imageLoader.DisplayImage(restaurant.get(RestaurantList.TAG_IMAGE), image);
}
//this line is example..
convertView.setBackgroundColor(position % 2 == 0 ? Color.WHITE : Color.GREEN);
// i wanna do like this (if there is name MacDonal in NewYork , set the background to green. otherwise leave it white.
// it gives me red underline at the 'logic operation' sentence.
convertView.setBackgroundColor(name == MacDonal && area == newYork ? Color.WHITE : Color.GREEN);
return convertView;
}
谁知道如何解决?谢谢!
答案 0 :(得分:1)
convertView.setBackgroundColor((restaurant.get(RestaurantList.TAG_NAME).equals("MacDonal") && restaurant.get(RestaurantList.TAG_AREA).equals("newYork")) ? Color.GREEN : Color.WHITE);
我不知道你了解这里使用的三元运算符。如果您需要解释,请告诉我
答案 1 :(得分:1)
使用类别之类的东西。例如:如果您将某个类别作为一种颜色而另一个类别作为一种颜色,则定义int category1 = 1
和category2 = 2
。并覆盖getview方法。那么你的适配器可能是
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list, null);
}
TextView text = (TextView) v.findViewById(R.id.text);
if (category1 == 1)
text.setTextColor(Color.GREEN);
if (category2 == 2)
text.setTextColor(Color.RED);
return super.getView(position, v, parent);
}
我希望这对你有用。
答案 2 :(得分:0)
这可能会在您的适配器setTextcolor中按照需要
帮助您 public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder;
if(view == null)
{
view = inflater.inflate(R.layout.myfriends_item, null);
holder = new ViewHolder();
holder.performerImage = (ImageView)view.findViewById(R.id.mfitem_iv);
holder.performerStar = (ImageView)view.findViewById(R.id.star);
holder.performerName = (TextView)view.findViewById(R.id.mfitem_tv_name);
holder.performerAge = (TextView)view.findViewById(R.id.mfitem_tv_age);
holder.performerPoints = (TextView)view.findViewById(R.id.mfitem_tv_pts);
holder.performStatus = (TextView)view.findViewById(R.id.mfitem_tv_status);
holder.performLookingfor = (TextView)view.findViewById(R.id.mfitem_tv_lookingfor);
holder.txtid = (TextView)view.findViewById(R.id.txtid);
view.setTag(holder);
}
else
{
holder = (ViewHolder)view.getTag();
}
//here you can set color as per require
try
{
if(topPerformersSetGet.getPerformerDataSetGets().get(position).getOnline() == 1)
{
holder.performStatus.setText(HotSpotSettings.ONLINE);
holder.performStatus.setTextColor(mContext.getResources().getColor(R.color.green));
}
else
{
holder.performStatus.setText(HotSpotSettings.OFFLINE);
holder.performStatus.setTextColor(mContext.getResources().getColor(R.color.clrred));
}
}catch(Exception ex)
{
ex.printStackTrace();
}
return view;
}
class ViewHolder
{
ImageView performerImage;
ImageView performerStar;
ImageView perforonlinestatus;
TextView performerName;
TextView performStatus;
TextView performerAge;
TextView performLookingfor;
TextView performerPoints;
TextView txtid;
}