Элемент ListView setTextColor изменил другие элементы - PullRequest
0 голосов
/ 24 апреля 2011

У меня есть ListView, поддерживаемый SimpleCursorAdapter и пользовательским ViewBinder. Я хочу, чтобы элементы в этом списке меняли цвет при нажатии. Если я делаю это в OnClickListener - он работает частично, изменяя цвет элемента, по которому щелкнули, и элементов вниз по списку, каждый седьмой (думаю, период зависит от видимой области списка).

Может кто-нибудь подсказать, как с этим бороться? Или, может быть, указывают на более элегантный способ сделать элементы в списке выбора доступными для выбора?

Спасибо.

UPD: (простите за плохое форматирование - я впервые задаю вопрос):

Ниже показано, как я пытаюсь сделать элемент в ListView «выбранным»:

    private void setupListView(final ListView lv) {

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> adapterView, View view, int position, final long id) {
                RelativeLayout layout = (RelativeLayout) view;
                int color;
                if (conditionMet) {
                      color = R.color.gray;
                 } else {
                      color = R.color.red;
                 }

                 for(int i = 0; i < layout.getChildCount(); i++) {
((TextView)layout.getChildAt(i)).setTextColor(getResources().getColor(color)); 
    }

                 return;
            }}

Вот так я запускаю адаптер:

        final SimpleCursorAdapter adapter =
                new SimpleCursorAdapter(
                        this,
                        itemId,
                        cursor,
                        from,
                        to
                );
        adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {

            public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
                final TextView textView = (TextView) view;
// do necessary conversions
                return true;
            }
        });
listView.setAdapter(adapter);

Ответы [ 2 ]

0 голосов
/ 16 июля 2011

Так как другого ответа нет, и, думаю, у меня возникли некоторые проблемы с предложением ниже, я выкладываю, как я это сделал:

  1. Я храню идентификаторы предметов, которые щелкнули на специальной карте

  2. в просмотре по списку. Я проверяю, есть ли на карте идентификатор только что нажатого элемента: если да, я удаляю его и делаю элемент и его дочерние элементы цветом A, в противном случае я добавляю идентификатор на карту и установите цвет B

    public void onItemClick(AdapterView<?> adapterView, View view, int position, final long id) {
                Context ctx = MainActivity.this;
                    RelativeLayout layout = (RelativeLayout) view;
                    try {
    
                            int color;
                            if (items.containsKey(id)) {
                                items.remove(id);
                                color = R.color.gray;
                                tempIds.remove(id);
                            } else {
                                items.put(id, sum);
                                color = R.color.red;
                                tempIds.add(id);
                            }
    
    
                        for (int i = 0; i < layout.getChildCount(); i++) {
                            final TextView textView = (TextView) layout.getChildAt(i);
                            textView.setTextColor(getResources().getColor(color));
                        }
                    } catch (ParseException e) {
                        Log.e(MainActivity.class.toString(), "Exception parsing", e);
                    }
                    return;
                }
    

    }

0 голосов
/ 24 апреля 2011

Вы можете использовать свойство android: listSelector , чтобы установить тему или любой рисунок или цвет текущего выбранного элемента в списке.

...