2013-10-31 2 views
1

사용자 지정 목록을 만들려고합니다. 목록 어댑터에서 , 나는의 getView (..) 메소드에서이 코드를 구현했습니다 :보기에 청취자를 추가하면 목록보기 항목이 취소 할 수 없게됩니다.

 final RelativeLayout layout = (RelativeLayout) row.findViewById(R.id.layout_main); 

     layout.setOnTouchListener(new View.OnTouchListener() 
     { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) 
      { 
       switch (event.getAction()) 
        { 
         case MotionEvent.ACTION_DOWN: 
         { 
          layout.setBackgroundColor(context.getResources().getColor(R.color.asia_red_color)); 
          return true; 
         } 

         case MotionEvent.ACTION_CANCEL: 
         case MotionEvent.ACTION_UP: 
         { 
          layout.setBackgroundColor(context.getResources().getColor(R.color.white)); 
          return true; 
         } 
        } 

       return false; 
      } 
     }); 

참고 내가 MainActivity에서 구현 한 onItemClickListener를 실행 방지/재 지정을 구현했습니다 리스너 .

모든 솔루션?

+1

에는 onItemClickListener가 있고 클릭시 배경색을 변경하는 선택자를 사용합니다 – Raghunandan

+0

소리는 아주 좋은 생각입니다. –

+0

내 게시물을 확인하고 그것이 당신을 위해 작동하는지 확인하고 목록보기 항목을 클릭하고 터치 리스너를 제거 할 때 버튼이 있는지 확인하십시오. – Raghunandan

답변

1

OnItemClickListener

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" android:drawable="@color/white" /> 
<item android:drawable="@color/yellow" /> 
</selector> 

이 목록보기의 선택을 그리기 가능 설정 폴더에 선택을

bkg.xml을 정의하게한다. 사용자 정의 레이아웃에 android:background="@drawable/bkg"

은 lsitview 행 항목 버튼이있는 경우

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="white">#FFFFFF</color> 
    <color name="yellow">#FFFF00</color> 
</resources> 

이 또한 확인 color.xml 색상을 정의합니다. 클릭하면 버튼이 포커스를받을 수 있습니다.

+0

고마워요. 그것은 작동했지만'state_pressed'는'state_selected'가 아닙니다. 일반적인 해결책을 제시 할 수 있습니까? 배경색을 변경하는 것 외에 다른 것을하고 싶다면 어떻게해야합니까? –

+0

@HamzehSoboh 일반화 된 솔루션과 예에 의해 의미하는 것은 무엇입니까? state_pressed 및 수행 할 의도가 무엇입니까 – Raghunandan

+0

예를 들어 메소드를 호출해야 할 수도 있습니다. 그런 다음 MainActivity에 OnItemClickListener가 필요하지 않습니다. 무시당했습니다. 실제로 지금 일어나고있는 일 이니까요. –

0

은 여기 무슨 일이 일어나고 있는지 잘 모르겠지만, 당신은 switchdefault 지점에서 슈퍼 클래스의 OnTouchListener를 호출하기 위해 이런 일을 시도 할 수 있습니다 :

layout.setOnTouchListener(new View.OnTouchListener() 
    { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) 
     { 
      switch (event.getAction()) 
       { 
        case MotionEvent.ACTION_DOWN: 
        { 
         layout.setBackgroundColor(context.getResources().getColor(R.color.asia_red_color)); 
         return true; 
        } 

        case MotionEvent.ACTION_CANCEL: 
        case MotionEvent.ACTION_UP: 
        { 
         layout.setBackgroundColor(context.getResources().getColor(R.color.white)); 
         return true; 
        } 
        default: return super.OnTouchListener(); 
       } 

     } 
    }); 

실례 경우 구문 내가 지금 바로 브라우저에 있기 때문에 잘못된 것입니다. 그러나 당신은 아이디어를 얻습니다.

관련 문제