2014-05-19 39 views
0

在Android 2.3上,當您單擊列表中的一個項目時,將選擇與列表中的一個項目相同的顏色。我使用自定義選擇器。爲什麼選擇列表中的一個項目會選擇ListView的所有元素?

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_window_focused="false" 
     android:drawable="@color/transparent" /> 
    <item android:state_focused="true" 
     android:state_enabled="false" 
     android:state_pressed="true" 
     android:drawable="@drawable/color_press" /> 
    <item android:state_focused="true" 
     android:state_enabled="false" 
     android:drawable="@drawable/color_press" /> 
    <item android:state_focused="true" 
     android:state_pressed="true" 
     android:drawable="@drawable/color_press" /> 
    <item android:state_focused="false" 
     android:state_pressed="true" 
     android:drawable="@drawable/color_press" /> 
    <item android:state_focused="true" 
     android:drawable="@drawable/color_press" /> 
</selector> 

ListView in xml。

<?xml version="1.0" encoding="utf-8"?> 
<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="#B7B7B7" 
    android:dividerHeight="1px" 
    android:listSelector="@drawable/list_view_selector" /> 

什麼問題?

UPD:
我的自定義適配器

public class CityAdapter extends ArrayAdapter<CityInfo> 
{ 

    private boolean isRus = false; 
    private LayoutInflater inflater; 

    public CityAdapter(final Context context, final List<CityInfo> objects) 
    { 
     super(context, -1, objects); 
     isRus = context.getString(R.string.locale).equalsIgnoreCase("ru"); 
     inflater = LayoutInflater.from(context); 
    } 

    private class ViewHolder 
    { 
     RadioButton radioButton; 
     TextView textView; 
    } 

    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) 
    { 
     ViewHolder holder; 
     if (convertView == null) 
     { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.welcome_city_case_list_item, null); 
      holder.radioButton = (RadioButton) convertView.findViewById(R.id.radioButton); 
      holder.textView = (TextView) convertView.findViewById(R.id.size); 
      convertView.setTag(holder); 
     } 
     else 
      holder = (ViewHolder) convertView.getTag(); 
     final CityInfo cityInfo = getItem(position); 

     holder.radioButton.setText(isRus ? cityInfo.getRus() : cityInfo.getEng()); 
     holder.textView.setHint(cityInfo.getVisibleZipSize()); 
     return convertView; 
    } 


} 

welcome_city_case_list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:focusable="false" 
     android:clickable="false" 
     > 
    <RadioButton 
      android:id="@+id/radioButton" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:paddingRight="10dp" 
      android:textColor="@color/black" 
      android:duplicateParentState="true" 
      style="@style/CustomRadioButton" 
      android:text="Екатеринбург" 
      android:layout_weight="1" 
      android:paddingTop = "10dp" 
      android:paddingBottom = "10dp" 
      android:clickable="false" 
      android:focusable="false" 
      android:background="@color/transparent" 
      /> 
    <TextView 
      android:id="@+id/size" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="0" 
      android:hint="2,1MB" 
      android:paddingLeft="10dp" 
      android:paddingRight="10dp" 
      android:focusable="false" 
      /> 
</LinearLayout> 
+0

您可以發佈您的ListView適配器 – tauitdnmd

+0

@tauitdnmd更新的代碼 – andreich

回答

0

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:divider="#b5b5b5" 
     android:dividerHeight="1dp" 
     android:listSelector="@drawable/list_selector" /> 

</LinearLayout> 

list_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_selected="false" 
     android:state_pressed="false" 
     android:drawable="@drawable/gradient_bg" /> 

    <item android:state_pressed="true" 
     android:drawable="@drawable/gradient_bg_hover" /> 

    <item android:state_selected="true" 
    android:state_pressed="false" 
     android:drawable="@drawable/gradient_bg_hover" /> 
</selector> 

試試這個

相關問題