2010-04-09 3 views
3

정확하게이 문제를 설명하는 방법을 모르겠지만 시도해 보겠습니다. 여러 항목이있는 ListView가 있습니다. 각 항목에는 TextView와 두 개의 ImageView가 있습니다. 이미지 뷰를 클릭 할 때 이미지 뷰를 변경하고, 오랫동안 ListView 항목을 누르면 컨텍스트 메뉴를 열고 싶습니다.ListView 항목을 클릭하면 항목 내부의 요소 상태가 변경됩니까?

ImageView의 경우 모든 것이 올바르게 작동합니다. 전체 항목에 대해 긴 프레스 후에 컨텍스트 메뉴를 표시 할 수 있지만 TextView를 누르면 ImageView가 변경되는 문제가 있습니다. 내 코드의

SOMO 조각 :

의 ListView 항목 :

 <TextView 
     android:id="@+id/title" 
     android:textColor="@color/black" 
     android:maxLines="2" 
     android:textSize="14dip" 
      /> 
    <ImageView 
     android:id="@+id/minus" 
     android:src="@drawable/minusbutton" 
     android:adjustViewBounds="true" 
     android:gravity="center" 
    /> 
    <ImageView 
     android:id="@+id/plus" 
     android:src="@drawable/plusbutton" 
     android:adjustViewBounds="true" 
     android:gravity="center" 
    /> 

드로어 블은 더하기 버튼의 상태 변경 :

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_enabled="false" 
     android:drawable="@drawable/button_add_normal_disabled" /> 
<item android:state_enabled="true" 
     android:state_pressed="true" 
     android:drawable="@drawable/button_add_pressed" /> 
<item android:state_enabled="true" 
     android:state_focused="true" 
     android:state_pressed="false" 
     android:drawable="@drawable/button_add_active" /> 
<item android:state_enabled="true" 
     android:state_focused="false" 
     android:state_pressed="false" 
     android:drawable="@drawable/button_add_normal" /> 

난 당신이 이해 희망을 내 문제. 나는 전망의 모든 아이들이 부모의 사건의 영향을받는다고 생각하지만, 나는 확실하지 않다.

해결책이 있으십니까? 미리 감사드립니다.

+0

[내 솔루션] (http://stackoverflow.com/a/13813751/1521536)을 살펴보십시오. 간단합니다. –

답변

0

쉬운 방법 일 수도 있고 매우 우아하지 않을 수도 있습니다. 이미지 뷰를위한 상태 저장 가능한 드로어 블을 없애고 OnItemClickListener()에서이 항목의 표시를 처리하십시오. 아마 어댑터의 Item 상태를 바꿀 것이고 어댑터의 getView는 상태에 따라 올바른 이미지를 넣어야합니다.

+0

감사합니다. Alex! 나는 "우아하지 않다"버전을 사용하려고했는데, 그것을 시도했기 때문에 작동하지만, 좀 더 우아한 방식으로 구현할 수 있는지 알고 싶다 : S – Antonio

+0

http://stackoverflow.com/ 질문/6741908/android-child-elements-shared-pressed-parents-with-duplicate/7235953 # 7235953 – aeracode

3

저는 ListView가 항목의 ViewGroup 상태를 설정하고 자식이 부모 상태를 복제하고 있다는 것을 믿습니다. 따라서 실제로는 state_pressed에있는 행이며 행 내부의 다른보기로 상속됩니다. 그 속성을 수정해야한다고 생각하는 android:duplicateParentState="false"이 있습니다.

+1

고마워요. 그것은 나에게 정말 좋았어, 불행히도 그것은 작동하지 않았다 ... –

6

이 문제를 해결하는 가장 쉬운 방법은 viewgroup을 상속하고 dispatchSetPressed를 재정의 (override)하는 것입니다.

여기

public class DuplicateParentStateAwareLinearLayout extends LinearLayout { 

    public DuplicateParentStateAwareLinearLayout(Context context) { 
     super(context); 
    } 

    public DuplicateParentStateAwareLinearLayout(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public DuplicateParentStateAwareLinearLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    /* 
    * By default ViewGroup call setPressed on each child view, this take into account duplicateparentstate parameter 
    */ 
    @Override 
    protected void dispatchSetPressed(boolean pressed) { 
      for (int i = 0; i < getChildCount(); i++) { 
      View child = getChildAt(i); 
      if (child.isDuplicateParentStateEnabled()){ 
       getChildAt(i).setPressed(pressed); 
      } 
     } 
     } 
} 

이 방법을 사용하여 캐치는이 동작을하지 말았어야 각 당신이 원하는 항목과 하위 항목에 대해 true로 duplicateparentstate을 설정해야합니다 것을있는 exemple에게 있습니다.

+0

불행히도 나를 위해, 작동하지 않았다. –

관련 문제