2016-04-20 6 views
0

enter image description here Ich habe ein Problem, wenn ich das ausgewählte Element in ExpandableListView hervorhebe.Bleiben Markiert das ausgewählte Element in ExpandableListView?

Mein Code hebt das ausgewählte Element richtig hervor. Aber das Problem zeigt jetzt den benutzerdefinierten Layout-Text. IE kann nicht das Textview wich in list_group.xml zu sehen und list_item.xml

activity_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" 
android:background="#f4f4f4" 
android:descendantFocusability="blocksDescendants" > 

     <ExpandableListView 
      android:id="@+id/lvExp" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:choiceMode="singleChoice" 
      android:listSelector = "@drawable/jsk" 
      android:drawSelectorOnTop="true" 
    /> 

mein list_selector ist jsk.xml

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

</selector> 

list_group .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="wrap_content" 
android:orientation="vertical" 
android:padding="8dp" 
android:background="#000000"> 


<TextView 
    android:id="@+id/lblListHeader" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft" 
    android:textSize="17dp" 
    android:textColor="#f9f93d" /> 

</LinearLayout> 

list_item.xml

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

<TextView 
    android:id="@+id/lblListItem" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="17dip" 
    android:paddingTop="5dp" 
    android:paddingBottom="5dp" 
    android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" /> 

</LinearLayout> 

Und meine Adapter-Klasse,

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

private Context _context; 
private List<String> _listDataHeader; // header titles 
// child data in format of header title, child title 
private HashMap<String, List<String>> _listDataChild; 

public ExpandableListAdapter(Context context, List<String> listDataHeader, 
     HashMap<String, List<String>> listChildData) { 
    this._context = context; 
    this._listDataHeader = listDataHeader; 
    this._listDataChild = listChildData; 
} 

@Override 
public Object getChild(int groupPosition, int childPosititon) { 
    return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .get(childPosititon); 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    return childPosition; 
} 

@Override 
public View getChildView(int groupPosition, final int childPosition, 
     boolean isLastChild, View convertView, ViewGroup parent) { 

    final String childText = (String) getChild(groupPosition, childPosition); 

    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_item, null); 
    } 

    TextView txtListChild = (TextView) convertView 
      .findViewById(R.id.lblListItem); 

    txtListChild.setText(childText); 
    return convertView; 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return this._listDataHeader.get(groupPosition); 
} 

@Override 
public int getGroupCount() { 
    return this._listDataHeader.size(); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
     View convertView, ViewGroup parent) { 
    String headerTitle = (String) getGroup(groupPosition); 
    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_group, null); 
    } 

    TextView lblListHeader = (TextView) convertView 
      .findViewById(R.id.lblListHeader); 
    lblListHeader.setTypeface(null, Typeface.BOLD); 
    lblListHeader.setText(headerTitle); 


    return convertView; 
} 

@Override 
public boolean hasStableIds() { 
    return false; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    return true; 
} 
} 

Wie mein Problem zu lösen?

+0

@Satish Kumar Ihr Problem ist, dass Sie den Text nicht sehen können, wenn das Listenelement hervorgehoben ist. habe ich recht ? –

+0

ja ja @nitintyagi –

+0

Sie können ein paar Dinge tun: zuerst ändern Sie Ihre Textfarbe. –

Antwort

0

die Leitung entfernen,

android:drawSelectorOnTop="true" 

bei activity_main.xml entfernen und auch die Linie

android:background="#000000" 

für group_item Auswahlindikator.

diese zwei Schritte lösten mein Problem.

0

Für das ausgewählte TextView setzen Sie nicht textColor von Selektor, fügen Sie einfach Selektor für es in Xml.

textview_color_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:color="@android:color/white" /> 
    <item android:state_pressed="true" android:color="@android:color/white" /> 
    <item android:color="@android:color/black" /> <!-- default case --> 
</selector> 

listitem.xml

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

    <TextView 
     android:id="@+id/lblListItem" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="17dip" 
     android:paddingTop="5dp" 
     android:textColor="@drawable/textview_color_selector" 
     android:paddingBottom="5dp" 
     android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" />   
    </LinearLayout> 
+0

keine Änderungen nach dem Hinzufügen von textview_color_selector.xml @Arun Shankar. sehe meinen Screenshot. Es zeigt an, dass Selektor die Hintergrundfarbe des untergeordneten Elements belegt. Ich kann die textColor nicht sehen. –

Verwandte Themen