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

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

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

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

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

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

Спасибо!

2 ответа

Решение

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

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

android:cacheColorHint="#00000000"

Чтобы установить фон ListView прозрачным.

Ну, я думаю, что одно решение, если вы используете 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
    }
};

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

Другие вопросы по тегам