Выбор элемента ListView

У меня есть ListView с пользовательскими элементами списка. Каждый элемент списка состоит из 2 линейных макетов, расположенных один рядом с другим. Линейный макет 1 | Линейный макет 2 |

Я объявил отрисовку списка состояний для обоих LinearLayouts, где в state_pressed я меняю фон LinearLayout.

И здесь возникает проблема: когда пользователь нажимает на LinearLayout2, должен быть изменен только фон LinearLayout2, фон LinearLayout1 должен оставаться неизменным. С другой стороны, когда пользователь касается LinearLayout1, должен измениться только фон LinearLayout1. Но теперь, когда пользователь нажимает на любой из обоих LinearLayouts, оба они меняют свой фон.

Поведение при нажатии на LinearLayout2 должно быть таким же, как и в onListItemClick(), а когда пользователь нажимает на LinearLayout1, должно появиться диалоговое окно (если это имеет значение).

Любые идеи, как я могу решить проблему изменения фона? Я пробовал играть с фокусируемыми и кликабельными параметрами. Если я установлю clickable=true для обоих LinearLayouts, дочерние элементы (TextViews) LinearLayout2 не изменят свой цвет (TextViews должны изменить цвет своего текста).

Благодарю вас!


person Zh. Atanasov    schedule 04.10.2011    source источник
comment
Пожалуйста, уточните подробнее. Содержит ли ваша строка списка два макета или что-то еще?   -  person Abhinav Singh Maurya    schedule 04.10.2011
comment
LinearLayout1 содержит только ImageView. LinearLayout2 содержит несколько TextView и ImageView. Оба LinearLayout1 и 2 помещаются в родительский LinearLayout с ориентацией=горизонтальной.   -  person Zh. Atanasov    schedule 04.10.2011


Ответы (2)


Это связано с тем, что при использовании представления списка вам необходимо изменить некоторые теги в XML, чтобы сделать фон прозрачным, чтобы он правильно работал с вашим фоном.

Добавьте это в XML-код ListView.

android:cacheColorHint="#00000000"

Чтобы сделать фон ListView прозрачным.

person coder_For_Life22    schedule 04.10.2011
comment
Это не работает. Более того, фоны LinearLayouts действительно меняются, но они оба меняются, а не только для одного из них. - person Zh. Atanasov; 04.10.2011
comment
Как выглядит ваш код для вашего onItemSelected? Или что вы используете, чтобы изменить цвет? Похоже, вы меняете цвет для обоих linearlayouts. - person coder_For_Life22; 04.10.2011
comment
У меня есть 2 списка состояний: один для первого LinearLayout и один для второго LinearLayout. В обоих списках состояний есть android:state_pressed с новым фоном, установленным как доступный для рисования. - person Zh. Atanasov; 04.10.2011
comment
Хорошо, если вы не хотите, чтобы фон для linearlayout1 или 2 менялся... Почему вы устанавливаете его нажатое состояние? Конечно, он изменит цвет. - person coder_For_Life22; 04.10.2011

Ну, я думаю, что единственное решение, если вы используете BaseAdapter как расширения

Сначала дайте уникальный идентификатор обоим этим макетам в вашем XML-файле и добавьте

android:clickable="true"

В вашем методе

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

когда вы получаете такие взгляды, как

 holder.layout1_name=(LinearLayout)view.findViewById(R.id.layout1);
 holder.layout1_name.setOnClickListener( clicklayout1);
 holder.layout2_name=(LinearLayout)view.findViewById(R.id.layout2);
holder.layout2_name.setOnClickListener( clicklayout2);

Добавьте на них прослушиватель кликов

private OnClickListener clicklayout1 = new OnClickListener() {
    public void onClick(View v) {

         //Do what you want to do here
    }
};


private OnClickListener clicklayout2 = new OnClickListener() {
    public void onClick(View v) {

         //Do what you want to do here
    }
};

Может быть, это может помочь вам

person Abhinav Singh Maurya    schedule 04.10.2011
comment
Да, изменение фона с помощью java-кода не должно быть сложной задачей, я просто хотел сделать это с помощью рисунков списка XML/состояний и тому подобного, это более элегантно. - person Zh. Atanasov; 04.10.2011
comment
Ну, если вам нужна динамика, вы должны делать это в java, но если вы хотите статику, вы можете делать это в xml. Но, мой друг, будьте осторожны при использовании в java, потому что, если вы не освободите ресурс, вы можете столкнуться с большой проблемой памяти. - person Abhinav Singh Maurya; 05.10.2011