2010-11-16 24 views
8

मैंने ListView के लिए अपना डेटा रखने के लिए ArrayList<HashMap<String, String>> संग्रह बनाया है। मैं SimpleAdapter का उपयोग कर रहा हूं।रंगीन वस्तुओं की पृष्ठभूमि के साथ कस्टम ListView कैसे करें?

सूची आइटम की आईडी% 10 == 0 जब सूची आइटम की पृष्ठभूमि बदलना संभव है?

यहाँ कोड (विधि पैदा लेआउट) है:

private void fillData() { 

    Cursor c = this.mDbManager.getNgOrderDetailByOrderNumber(this.mNumber); 

    ArrayList<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>(); 

    if (!c.isAfterLast()) { 
     do { 
      // ... filling HashMap and putting it to ArrayList 
     } while (c.moveToNext()); 
    } 

    SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.list_item, 
     new String[] { "product", "ordered", "price", "discount" }, 
     new int[] { R.id.ProductTextView, R.id.OrderedTextView, 
     R.id.PriceTextView, R.id.DiscountTextView }); 
    ListView l = (ListView) findViewById(android.R.id.list); 
    l.setAdapter(adapter); 
} 

उत्तर

8

देखने के लिए आपको परिवर्तन करने के लिए अपने एडाप्टर में getView ओवरराइड। ध्यान रखें कि ListView दृश्य कार्यान्वयन का पुन: उपयोग करता है, इसलिए यदि आप रंग 10 में रंग बदलते हैं, तो सुनिश्चित करें कि आप अन्य सभी विचारों के लिए रंग को विपरीत में सेट करें।

उदा।

new SimpleAdapter(...) { 
    @Override 
    public View getView (int position, View convertView, ViewGroup parent) { 
    View view = super.getView(position, convertView, parent); 
    if (position == 10) { 
     // set background color = red; 
    } else { 
     // set background color = green; 
    } 
    return view; 
    } 
} 
+0

नीचे बहुत बहुत शुक्रिया का उपयोग किया है हल –

0

इसे पूरा करने के आप एक कस्टम सरणी एडाप्टर बनाने के लिए और फिर अगर स्थिति ठीक कह रहे हैं पृष्ठभूमि का रंग बदलने की जरूरत है। एक उदाहरण के लिए इस पोस्ट के बाहर

की जांच: Custom ArrayAdapter setBackground in getView

+0

बहुत बहुत शुक्रिया, greate ट्यूटोरियल, लेकिन मैं एक –

3

यहाँ कोड है, आशा है कि यह अन्य उपयोगकर्ताओं के लिए उपयोगी हो जाएगा

private void fillData() { 

    Cursor c = this.mDbManager.getNgOrderDetailByOrderNumber(this.mNumber); 

    ArrayList < HashMap < String, String >> items = new ArrayList < HashMap < String, String >>(); 

    if (!c.isAfterLast()) { 
     do { 
      // ... filling HashMap and putting it to ArrayList 
     } while (c.moveToNext()); 
    } 

    SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.list_item, 
     new String[] { 
     "product", "ordered", "price", "discount" 
    }, 
     new int[] { 
     R.id.ProductTextView, R.id.OrderedTextView, 
     R.id.PriceTextView, R.id.DiscountTextView 
    }) { 

     // here is the method you need to override, to achieve colorful list 

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

      View view = super.getView(position, convertView, parent); 

      HashMap < String, String > items = (HashMap < String, String >) getListView() 
       .getItemAtPosition(position); 
      if (Long.parseLong(items.get("id")) % 10 == 0) { 
       view.setBackgroundColor(Color.GREEN); 
      } else { 
       view.setBackgroundColor(Color.YELLOW); 
      } 
      return view; 
     } 

    }; 
    ListView l = (ListView) findViewById(android.R.id.list); 
    l.setAdapter(adapter); 
}