ListView背景颜色使用逻辑

时间:2013-03-22 04:26:19

标签: android listview

我通过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; 
    }  

谁知道如何解决?谢谢!

3 个答案:

答案 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 = 1category2 = 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; 
    }