2

我想为用户点击我的expandableListView中的子项目时设置项目的背景颜色。Android ExpandableListView:设置点击选定项目的背景颜色

下面是代码:

expListView.setOnChildClickListener(new OnChildClickListener() { 

@Override 
     public boolean onChildClick(ExpandableListView parent, View v, final int groupPosition, final int childPosition, long id) { 

      AlertDialog.Builder builder = new AlertDialog.Builder(New_annonce_act_step2.this); 
      builder.setMessage("Vous avez choisi la catégorie " +listDataChild.get(listDataHeader.get(groupPosition)).get(childPosition) +", Continuer ?") 
      .setPositiveButton("Oui", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        Intent myIntent = new Intent(New_annonce_act_step2.this, New_annonce_act_step22.class); 
        myIntent.putExtra("titre", titre); 
        myIntent.putExtra("categorie", categorie); 
        New_annonce_act_step2.this.startActivity(myIntent); 
        finish(); 

        overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left); 

       } 
      }) 
      .setNegativeButton("Non", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // User cancelled the dialog 
       } 
      }); 
      // Create the AlertDialog object and return it 
      builder.create(); 
      builder.show(); 

      return false; 
     } 

    }); 

这里是布局ExpandableListView声明:

<ExpandableListView 
      android:id="@+id/nouvelle_annonce_categorie" 
      android:layout_width="match_parent" 
      android:layout_height="320dp" 
      android:layout_marginLeft="1dp" 
      android:layout_marginRight="1dp" 
      android:choiceMode = "singleChoice" 
      android:listSelector = "@drawable/selector_categorie_item" 
      android:layout_marginTop="15dp" /> 

这里是selector_categorie_item.xml的COE:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:exitFadeDuration="@android:integer/config_mediumAnimTime"> 

    <item android:drawable="@android:color/holo_blue_bright" android:state_pressed="true"/> 
    <item android:drawable="@android:color/holo_blue_light" android:state_selected="true"/> 
    <item android:drawable="@android:color/holo_blue_dark" android:state_activated="true"/> 

</selector> 
+0

并与您的选择有什么错? – GIGAMOLE 2015-02-06 14:05:08

+0

当我点击该项目时,不应用背景颜色。 – wawanopoulos 2015-02-06 14:06:00

回答

2

在第一删除属性:

<ExpandableListView 
       android:listSelector = "@drawable/selector_categorie_item" /> 

并且还从ExpandableListView删除background选择器。

然后在你的孩子的版面项目投入下一个属性:

<YourLayout 
     android:background = "@drawable/your_selector" /> 

也许你需要的selector这样的:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_enabled="true" 
    android:state_pressed="true" android:drawable="@drawable/exp_list_item_bg_pressed" /> 
    <item android:state_enabled="true" 
    android:state_focused="true" android:drawable="@drawable/exp_list_item_bg_focused" /> 
    <item android:state_enabled="true" 
    android:state_selected="true" android:drawable="@drawable/exp_list_item_bg_focused" /> 
    <item 
    android:drawable="@drawable/exp_list_item_bg_normal" /> 
</selector> 
+0

我尝试你的代码,但同样的事情,颜色不会改变。 – wawanopoulos 2015-02-06 14:13:09

+0

外观更新。必须工作。 – GIGAMOLE 2015-02-06 14:16:56

+0

现在,点击后,只有expandableListView的网格改变了颜色。点击的项目不会改变.. – wawanopoulos 2015-02-06 14:26:42

2

这个工作对我来说:

expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { 
     @Override 
     public boolean onGroupClick(ExpandableListView parent, View view, int groupPosition, long id) { 
      int index = parent.getFlatListPosition(ExpandableListView 
        .getPackedPositionForGroup(groupPosition)); 
      parent.setItemChecked(index, true); 

      return false; 
     } 
    }); 
    expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
     @Override 
     public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 
      /*Toast.makeText(scanTemplateFragment.getActivity(), 
        expandableListTitle.get(groupPosition) 
          + " -> " 
          + expandableListDetail.get(
          expandableListTitle.get(groupPosition)).get(
          childPosition), Toast.LENGTH_SHORT).show();*/ 
      int index = parent.getFlatListPosition(ExpandableListView 
        .getPackedPositionForChild(groupPosition, childPosition)); 
      parent.setItemChecked(index, true); 

      return false; 
     } 
    }); 

,并设置来自list_item.xml的背景:

<?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="wrap_content"> 
    <TextView 
      android:id="@+id/tvListItem" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" 
      android:paddingTop="10dp" 
      android:background="@drawable/row_highlighter" 
      android:paddingBottom="10dp" /> 
</LinearLayout> 

row_highlighter.xml:

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