@asdf999
Android Programmer

Как не допустить распространение state_pressed на потомка LinearLayout?

Дано ListView. Каждый item этого ListView содержит:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/fl_item"
             android:orientation="horizontal"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:background="@drawable/back_list_item"

        >
<LinearLayout
                      android:layout_width="0dip" android:layout_height="fill_parent"
                      android:layout_weight="1"
                      android:orientation="vertical"
                      android:paddingRight="5dip"
                      android:paddingLeft="5dip"
                      android:paddingBottom="5dip"
                      >
            <TextView android:id="@+id/tv_title"
                      android:layout_width="fill_parent" android:layout_height="wrap_content"
                      android:singleLine="false"
                      android:layout_weight="1"
                      android:text="Lenovo A 1000"
                      android:textSize="14sp"
                      android:textStyle="normal"
                      android:maxLines="3"
                      />
</LinearLayout>
<ImageView android:id="@+id/toBasketImageView"
                android:layout_width="wrap_content" android:layout_height="fill_parent"
                android:scaleType="fitCenter"
                android:src="@drawable/item_add_to_basket"
/>
</LinearLayout>


ImageView содержащий drawable item_add_to_basket:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/to_basket_2_white" />
    <item android:state_pressed="false" android:drawable="@drawable/to_basket_1_white" />
</selector>


Каждый item должен обрабатывать нажатия (вызывается setOnItemClickListener) и также ImageView с id toBasketImageView должен обрабатывать нажатия. Получается что ImageView показывает нажатое состояние как при нажатии на него так и при нажатии на остальной item.
Как этого избежать? Как показывать нажатое состояние только при нажатии на ImageView?

PS. Я пробовал добавить clickable="true" к LinearLayout - состояние state_pressed не передается к ImageView но тогда и OnItemClickListener не срабатывает.
  • Вопрос задан
  • 2533 просмотра
Пригласить эксперта
Ответы на вопрос 1
aratj
@aratj
программер.
если еще актуально, то один из вариантов это

написать свои компоненты
например.

package widgets;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;

public class ImageViewEx extends ImageView {

	public ImageViewEx(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

	@Override
    public void setPressed(boolean pressed) {
        if (pressed && getParent() instanceof View && ((View) getParent()).isPressed()) {
            return;
        }
        super.setPressed(pressed);
    }
}


кстати, на сколько я помню, такое поведение на версиях от 3.0 , уже исправлено.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы