2012-11-20 73 views
0

沒有人知道如何在創建列表視圖時爲每行的背景着色?Android顏色行

我有一個從我的數據庫中拉出的arraylist,並填充一個列表視圖的佈局。

我懷疑可能有辦法用簡單的方法來做到這一點,但不能弄明白。

任何幫助,將不勝感激:)

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.item_list); 

     // Read var from Intent 
     Intent intent= getIntent(); 
     final String ListID = intent.getStringExtra("ListID"); 
     golbalItemID = ListID; 

     ivAdd = (ImageView) findViewById(R.id.ivAdd); 
     ivCancel = (ImageView) findViewById(R.id.ivCancel); 
     tvTotItems = (TextView) findViewById(R.id.tvTotItems); 

     final myDBClass myDb = new myDBClass(this); 
     final ArrayList<HashMap<String, String>> MebmerList = myDb.SelectAllItemData(ListID);  

     myData = myDb.SelectItemData(Integer.parseInt(ListID.toString())); 

     // listView1 
     final ListView lisView1 = (ListView)findViewById(R.id.listView1); 
     registerForContextMenu(lisView1); 

     MyAdapter sAdap; 
     sAdap = new MyAdapter(ListItems.this, MebmerList, R.layout.activity_column, new String[] {"Name", "Price", "Quan"}, new int[] {R.id.ColName, R.id.ColTel, R.id.ColQuan});  
     lisView1.setAdapter(sAdap); 

     lisView1.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> myAdapter, View myView, int position, long mylng) { 
        int iChk = 0; 
       // Show Data 
       String arrData[] = myDb.SelectItemData((MebmerList.get(position).get("ItemID").toString())); 
       if(arrData != null) 
       { 
        iChk = Integer.parseInt(arrData[4]);  
       } 

       if(iChk == 1) 
       { 
        ischkCheck(Integer.parseInt(MebmerList.get(position).get("ItemID").toString()), 0); 
        change_color(lisView1, position, 255, 255, 255); 

        System.out.println("POSITION!ichk=1" + myAdapter.getItemAtPosition(position).toString()); 
        setTitle(myAdapter.getItemAtPosition(position).toString()); 
       } 

       else if(iChk == 0) 
       { 
        ischkCheck(Integer.parseInt(MebmerList.get(position).get("ItemID").toString()), 1); 
        change_color(lisView1, position, 155, 155, 138); 

        System.out.println("POSITION!ichk=0" + myAdapter.getItemAtPosition(position).toString()); 
       } 

       }}); 

     ivAdd.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Intent newActivity = new Intent(ListItems.this,AddItem.class); 
       newActivity.putExtra("ListID", ListID); 
       startActivity(newActivity); 
       finish(); 
      } 
     }); 

     ivCancel.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Intent newActivity = new Intent(ListItems.this,MenuScreen.class); 
       startActivity(newActivity); 
       finish(); 
      } 
     }); 
+1

顯示代碼MyAdapter'。你可以在'getView'中根據'position'設置行的顏色。 –

回答

3

創建Adapter類,並控制它的每一行的顏色,然後將其設置爲ListView 這裏適配器是從我的項目之一的樣本代碼,檢查getView職能:'

public class ListAdapter extends BaseAdapter { 

    private LayoutInflater myInflater; 
    private List<Poet> list; 

    public ListAdapter(Context context) { 
     super(); 
     myInflater = LayoutInflater.from(context); 

     Log.d("Ganjoor", "Data passed to the adapter."); 

    } 

    static class ViewHolder { 
     TextView tvName; 
    } 

    public void setData(List<Poet> list) { 
     this.list = list; 
    } 

    @Override 
    public int getCount() { 

     return list.size(); 
    } 

    @Override 
    public Poet getItem(int position) { 

     return (null == list) ? null : list.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 

     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 

     if (convertView == null) { 
      convertView = myInflater.inflate(R.layout.list_adapter, parent, 
        false); 
      holder = new ViewHolder(); 
      holder.tvName = (TextView) convertView.findViewById(R.id.tvName); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.tvName.setTag(list.get(position).getId()); 
     holder.tvName.setText(list.get(position).getName()); 
     // Log.d("Ganjoor", "Adapter: " + list.get(position).getName()); 

     if (position % 2 == 0) { 
      convertView.setBackgroundResource(R.drawable.grad_blue); 
     } else { 
      convertView.setBackgroundResource(R.drawable.row_style); 
     } 

     return convertView; 
    } 

} 
+0

這工作得很好......謝謝:) – MachineDude

0

由於@Nikita Beloglazov狀態,你可以通過實現自定義ArrayAdapter,把你的色彩方案在getView覆蓋方法做到這一點。請參閱ArrayAdapter doc