2013-03-22 74 views
1

我已經通過谷歌修改和計算器..ListView的背景顏色邏輯

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; 
    } 

任何人都知道如何解決?謝謝!

回答

1
convertView.setBackgroundColor((restaurant.get(RestaurantList.TAG_NAME).equals("MacDonal") && restaurant.get(RestaurantList.TAG_AREA).equals("newYork")) ? Color.GREEN : Color.WHITE); 

我不知道你瞭解這裏使用的三元運算符。告訴我,如果你需要解釋

+0

完美。此代碼有效!非常感謝Naveen!我會消化它。 = d – 2013-03-22 06:39:30

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); 
} 

我希望這會對你有用。

0

這或許可以幫助你,在你的適配器setTextcolor,BACKGROUNDCOLOR按要求

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; 
    }