Как сделать собственный ListView с фоном красочных элементов? - PullRequest
8 голосов
/ 17 ноября 2010

Я создал коллекцию ArrayList<HashMap<String, String>> для хранения моих данных для ListView.Я использую SimpleAdapter.

Можно ли изменить фон элемента списка, когда идентификатор элемента списка% 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);
}

Ответы [ 3 ]

8 голосов
/ 17 ноября 2010

Вы переопределяете 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;
  }
}
3 голосов
/ 21 ноября 2010

Вот код, надеюсь, он будет полезен другим пользователям

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);
}
0 голосов
/ 17 ноября 2010

Для этого вам нужно создать собственный адаптер массива, а затем изменить цвет фона, если условия правильные.

Проверьте этот пост для примера: Пользовательский ArrayAdapter setBackground в getView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...