2015-12-24 97 views
1

我已阅读关于此事的一些帖子,但仍然无法让它工作。我想有一个复选框的列表视图。这里是我的activity_choose_songs.xmlandroid,列表视图与复选框

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

    <TextView 
     android:id="@+id/songs_to_choose" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/sd_cards_playlist" 
     android:textStyle="bold" 
     android:gravity="center" 
     android:textSize="30sp" 
     android:paddingTop="5dp" 
     android:paddingBottom="5dp" 
     /> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:listSelector="@drawable/list_selector" 
     android:divider="#242424" 
     android:dividerHeight="1dp" 
     android:layout_below="@+id/songs_to_choose"> 
    </ListView> 

</RelativeLayout> 

而这里的特定项目的布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:padding="5dp" 
    android:background="@drawable/list_selector"> 

    <CheckedTextView 
     android:id="@+id/checkedTextView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textSize="16sp" 
     android:padding="10dp" 
     android:gravity="center" 
     android:drawableStart="?android:attr/listChoiceIndicatorMultiple" 
     android:textColor="#f3f3f3" /> 

</LinearLayout> 

下面是onCreate()方法提取物,我想显示该列表视图的活动:

ListAdapter adapter = new SimpleAdapter(getApplicationContext(),chosenSongsListData, 
       R.layout.playlist_checked_item,new String[]{"songTitle"},new int[]{R.id.checkedTextView}); 

     setListAdapter(adapter); 
     ListView lw = getListView(); 

     lw.setItemsCanFocus(false); 
     lw.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE); 

     lw.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      } 
     }); 

然而,当我开始活动时,我试图检查它,它看起来像(屏幕处于按下状态): enter image description here

我的方法有什么问题?

+1

意思是,什么是错的,它没有检查? –

+0

我建议使用RecyclerView代替,你可以单独设置项目和复选框的点击监听器,也可以查看这个答案http://stackoverflow.com/a/10529176/2146871 – JuliusScript

回答

2

我认为问题是你的项目视图中有一个LinearLayout。它不能把它的地位传播给孩子们。

我想你有2个选项。

第一个是删除LinearLayout。您的观点目前尚未实施Checkable。当你删除它CheckedTextView应该工作。

第二个选择是使用CheckedLinearLayout,让您的孩子有这样的属性:

android:duplicateParentState="true"` 

你可以找到CheckedLinearLayout网上实现。

+1

嗨,谢谢,真棒回答:) –

-1

您必须在您的on项目单击侦听器中执行此操作,示例代码如下。

 lw.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      CheckBox check = (CheckBox) view.findViewById(R.id.checkedTextView); 

      check.toggle(); //check or un-check the checkbox 

      } 
     }); 
+0

切勿手动更改视图的状态。只有'getView'方法应该改变它。这将无法在重新创建视图的滚动和配置更改中生存。 – tasomaniac

+0

@tasomaniac,是的,谢谢你的评论。我只是建议他,因为他提到“无法通过单击列表项检查复选框”,我认为这是最简单的方法。我没有想到保留状态:)。 –