2011-01-13 1 views
1

항목이있는 목록이 있으며 일부 항목은 '열어 본 상태'일 수 있습니다. 나는 그 아이템들이 다른 배경색을 가지고 나머지는 갖고 싶다.내 목록의 특정 항목에 다른 색상이 있습니다.

목록보기에는 기본적으로 전체 목록에 대한 하나의 선택기가 있습니다. 항목 중 하나에 배경색을 설정하면 선택기가 배경으로 내 항목의 레이아웃 아래에 그려 지므로 투명하게 표시됩니다.

목록에 하나 이상의 선택기를 정의 할 수있는 방법이 있습니까? 그렇지 않은 경우 여분의 상태가있는 선택기를 만들 수 있습니까? 기본적으로 내가 원하는 것은 일반 목록 선택기와 ColorDrawable이 color.xml에 정의되어있는 여분의 상태입니다. (drawable에서 상속받을 수 없기 때문에 android의 draw_slector는 SDK에서 보이지 않습니다. 단지 상태를 추가하고 싶지만 추가 상태를 사용하려면 어떻게해야합니까?)

+0

확인 제가 문제가 선택기에 없다는 것을 알았습니다. 내가 원하는 것은 Gmail 앱과 같은 항목에 대해 두 가지 색상이있는 목록으로 read \ 읽지 않은 항목에 대한 것입니다. 다시 한번 문제는 특정 항목에 배경을 설정하면 선택자가 더 이상 보이지 않는다는 것입니다. 선택이나 누르기 이벤트에서 항목의 aplha 수준을 어떻게 변경할 수 있습니까? – codeScriber

답변

3

답을 찾았습니다. 내 문제는 선택기의 상태가 아니므로 모든 항목에 대해 동일한 상태의 선택기를 원합니다. 문제는 어댑터의 항목에있는 특정 부울이 false이고 부울이 참인 경우 X가 항목을 원하지만 색상이 X 인 경우에도 선택되거나 눌러 진 후에 투명하게 유지되기를 원합니다. . (목록 항목 IE 난 상태를 얻는 하나, 그것은 어린이에 상태를 통과 않습니다되어있는 경우에도 목록 자체를 발견

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:drawable="@android:color/transparent" /> <!-- pressed --> 
    <item android:state_selected="true" 
      android:drawable="@android:color/transparent" /> <!-- focused --> 
    <item android:drawable="@color/viewed_hotels_color" /> <!-- default --> 
</selector> 

:

그래서이 솔루션은 다음과 같은 XML이다) 나는 그것이하지 않는다라고 생각했다. 안드로이드 : 포커스는 여기서는 효과가 없습니다. 안드로이드 목록 항목은 집중되지 않고 선택되어 있습니다 ... 그래서 눌려지지 않았거나 선택되지 않은 상태에서 볼 수 있듯이 기본 색을 제공합니다. 그렇지 않으면 투명하게 표시되고 선택기가 모든.

View itemView = convertedView; <- i'll spare you the layout details... 
Item item = getItem(position); 
if(item.isViewed()){ 
    itemView.setBackgroundResource(R.drawable.viewed_item_background); 
}else{ 
    itemView.setBackgroundDrawable(null); 
} 

이 모든 항목이 올바른 배경을 얻을 것이다 확인합니다 : 내 어댑터

은 내가 (의 getView() 메소드)에 다음과 같은 코드가 필요합니다. 물론 항목 상태가보기로 변경되고 어댑터에 notifyDatasetCahnged()를 호출해야한다고 표시하려고합니다.

0

Adapter의 사용자 정의 하위 클래스를 구현하고 getView() 메서드를 재정의 할 수 있습니다. 이 메서드는 하나의 항목에 대해 View을 얻기 위해 목록에서 호출되므로 getView()을 재정 의하여 단일 목록 항목의 모양을 정의 할 수 있습니다. 따라서 이미 본 항목의 배경색을 변경해도 문제가되지 않습니다.

UPDATE

ListView 클래스 setDrawSelectorOnTop()라는 메소드가 연장 AbsListView 클래스. 선택기의 동작을 제어하는 ​​데 사용할 수 있다고 생각합니다.

+0

방금 ​​설명이 작동하지 않는 이유를 설명했는데, getView()에서 만든보기를 배경으로 설정했을 때 선택기가 뷰 아래에서 그려지기 때문에 해당 항목을 더 이상 누르지 않거나 선택하지 않는 상황이 발생합니다 보기의 배경을 투명하게 집계합니다. 명백한 것에 대답하기 전에 읽어보십시오. – codeScriber

+0

Ups, 그럼 당신이 질문하는 것을 오해했습니다. 그 죄송합니다. – Flo

+0

아무런 문제 :-) U는 좋은 질문입니다 .-) – codeScriber