2013-08-20 128 views
0

我有一个主 - 细节ListView的设置,并且我想改变主片段中选定项目的背景。设置一个ListView项目来选择

我曾经有过下面的代码,但是这并不让我用一个完整的选择:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 

     // Highlight selected item 
     if (position == selectedPos) { 
      view.setBackgroundColor((view.getResources() 
      .getColor(R.color.nw_white))); 
     } else { 
      view.setBackgroundColor((view.getResources() 
      .getColor(R.color.nw_grey))); 
     } 
     return view; 
    } 

它工作正常,但我想使用选择。 (因为我想要的物品,以改变适当地对焦点的背景和点击。)

所以我把它改为:

  @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 

     // Highlight selected item 
     if (position == selectedPos) { 
      view.setSelected(true); 
      // view.setBackgroundColor((view.getResources() 
      // .getColor(R.color.nw_row_download_master_selected))); 
     } else { 
      view.setSelected(false); 
      // view.setBackgroundColor((view.getResources() 
      // .getColor(R.color.nw_row_download_master_normal))); 
     } 
     Log.d(TAG, "pos " + position + " is selected: " 
      + view.isSelected()); 

     return view; 
    } 

凡列表行是这样的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/selector_row_collection_master" 
    android:orientation="horizontal" 
    > 

    ... 
</LinearLayout> 

而选择这样的:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/row_master_detail_pressed" 
      android:state_pressed="true" /> 
    <item android:drawable="@drawable/row_master_detail_focused" 
      android:state_focused="true" /> 
    <item android:drawable="@color/nw_row_master_master_selected" 
      android:state_selected="true" /> 
    <item android:drawable="@color/nw_row_master_normal" /> 
</selector> 

行响应点击事件,但没有被选中,即使ŧ他记录员说,这个观点确实被选中了!到底是怎么回事?

+0

摆脱getView的东西,只需将选择器设置为一个ListView项目的android:backkground – pskink

+0

然后选定的项目仍然不亮起来...... – Maarten

+0

我尝试使用简单的TextView作为ListView行,它工作得很好 – pskink

回答

2

我不知道为什么作为选择的视图将不会显示,即使它被设置为选择,但是这个代码应该工作:

使用ListView.setItemChecked()

mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
mListView.setItemChecked(position, isActivated); 

选择:

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

因为android:state_activated仅适用后蜂窝,将它添加到getView()

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { 
       // Highlight selected item 
       if (position == selectedPos) { 
        view.setBackgroundColor((view.getResources() 
          .getColor(R.color.nw_row_master_selected))); 
       } else { 
        Drawable sel = view.getResources().getDrawable(
          R.drawable.selector_row_collection_master); 
        view.setBackgroundDrawable(sel); 
       } 
      } 
1

您必须为您设置selectoritem view并删除list-viewselector。只需将list-viewselector设为@null即可。希望这可以帮助。

0

你应该使用state_activated,不state_selected看到https://stackoverflow.com/a/13634298/1283554

注意选择在ListView项目:state_activated只能从蜂窝。对于旧版本,我认为你不能只使用选择器。您可能必须设置背景getView

+0

我试过stateActivated(true),它也不更新。 – Maarten

+0

我希望我的应用能够与姜饼兼容 – Maarten