2012-04-11 3 views
2

내가 목록보기에 상황 별 동작 모드를 추가하려고하는데, 내가 선택하면 어떤 문제가 발생합니다. List1.setSelection(position) 아무 것도 선택하지 않고, 내가 만든 경우 List1.setItemChecked(position, true) 그것은 작동하지만 글꼴 색을 조금만 변경하고 배경이나 뭔가 더 주목할만한 것을 변경하고 싶습니다. 선택을 감지하고 수동으로 배경을 변경하거나 무언가를 놓치는 방법이 있습니까?
안드로이드 listview 배열 어댑터를 선택했습니다

목록 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <ListView 
     android:id="@+id/list1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:choiceMode="singleChoice" 
     android:drawSelectorOnTop="false"> 
    </ListView> 
</RelativeLayout> 

어댑터 : 레이아웃의 사용과

public class ServicesRowAdapter extends ArrayAdapter<String[]> { 
    private final Activity context; 
    private final ArrayList<String[]> names; 
    static class ViewHolder { 
     public TextView Id; 
     public TextView Date; 
     public RelativeLayout statusbar,bglayout; 
    } 

    public ServicesRowAdapter(Activity context, ArrayList<String[]> names) { 
     super(context, R.layout.servicesrowlayout, names); 
     this.context = context; 
     this.names = names; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View rowView = convertView; 
     if (rowView == null) { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      rowView = inflater.inflate(R.layout.servicesrowlayout, null); 
      ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.Id = (TextView) rowView.findViewById(R.id.idlabel); 
      viewHolder.Date = (TextView) rowView.findViewById(R.id.datelabel); 
      rowView.setTag(viewHolder); 
     } 

     ViewHolder holder = (ViewHolder) rowView.getTag(); 

     holder.Date.setText(names.get(position)[2]); 
     holder.Id.setText(names.get(position)[1]); 
     return rowView; 
    } 

} 

:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 
    <TextView 
     android:id="@+id/idlabel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:gravity="right" 
     android:text="@+id/idlabel" 
     android:textSize="20dp" 
     android:width="70dp" > 

    </TextView> 
     <TextView 
     android:id="@+id/datelabel" 
     android:layout_centerVertical="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@+id/datelabel" 
     android:textSize="20dp" 
     android:layout_marginLeft="90dp" > 
    </TextView> 

</RelativeLayout 
+0

여기 정말 간단한 방법입니다 : [다른 게시물에 대한 답변] [1] [1] : http://stackoverflow.com/a/25694161/244911 –

답변

4

이 터치 모드를 변경할 수 없기 인 더 집중이 없거나 선택. 체크 된 상태를 사용하면 올바른 길을 가고 있습니다. 다른 상태의 상태 드로어 블을 사용해야합니다.

단계 :

1) row_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/item_selector" 
> 

2) (새 XML 파일을 만듭니다 당신처럼 그릴 수 폴더에) 당신의 행 레이아웃에 사용 된 하나에 이름과 일치에서 그래서 (나는 color.xml 파일 당신이 단순히 거기에 16 진수 색상 코드를 넣을 수 있습니다하지 않으면 그래서, 색상/색상 @ 사용할 수 있습니다 설정 한 점에 유의) : 그것 뿐이다

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

합니다. 직관적 인 것은 아니지만 "활성화 됨"은 기본적으로 선택 상태를 활성화했을 때 "확인 됨"을 의미합니다.

이 설정을 사용하면 목록 행을 검사 가능하게 할 수 있으므로 선택 상태 인 경우 정상적으로 파란색으로 바뀌게됩니다. onTouch 또는 onClick에서 해당 상태를 설정하는 코드를 추가하면 모든 설정이 완료됩니다. 다른 항목을 터치 할 때까지 배경은 그대로 유지됩니다.

+0

을 내가 diferente 휴대폰을 사용하고, 그들은 서로 다른 "기본"색상을 가지고 있습니다. 단지 파란색을 정의하는 대신 시스템 색상을 얻는 방법이 있습니까? – Joaolvcm

+1

프로그래밍 방식으로 몇 가지 방법을 찾았지만 정적 XML 파일에서 색상을 정의 할 때 도움이되지 않습니다. – Barak

관련 문제