Modifier l’indicateur extensible dans ExpandableListView

J’essaie de créer un ExpandableListView. La vue initiale avec les groupes apparaît bien. Cependant, lorsque je clique sur l’élément de liste, ma flèche ne change pas. Voir les images ci-dessous.

entrer la description de l'image ici

Comment puis-je changer la direction de la flèche?

J’ai le layout XML:

 

settings_selector.xml :

         

vue de liste extensible

   

setindicator ici iam en utilisant le code setindicator comme celui-ci ce beau travail

  DisplayMesortingcs mesortingcs = new DisplayMesortingcs(); getWindowManager().getDefaultDisplay().getMesortingcs(mesortingcs); int width = mesortingcs.widthPixels; mExpandableList = (ExpandableListView)findViewById(R.id.expandable_list); mExpandableList.setIndicatorBounds(width - GetPixelFromDips(50), width - GetPixelFromDips(10)); public int GetPixelFromDips(float pixels) { // Get the screen's density scale final float scale = getResources().getDisplayMesortingcs().density; // Convert the dps to pixels, based on density scale return (int) (pixels * scale + 0.5f); } 

res / drawable / group_indicator

                

Essayez cela pour votre settings_selector.xml :

      

J’avais suivi le chemin ci-dessous: décidez du dessin à gauche / à droite pour votre groupView basé sur l’indicateur isExpanded.
De cette façon, il est plus facile pour nous de personnaliser le remplissage / l’arrière-plan et d’autres éléments de l’indicateur.

J’espère que cela aide.

  public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { TextView textView = (TextView) mLayoutInflater.inflate(R.layout.menu_group, null); textView.setCompoundDrawablesWithInsortingnsicBounds(0, 0, isExpanded ? 0 : android.R.drawable.ic_menu_more, 0); textView.setText(getGroup(groupPosition).toSsortingng()); return textView; } 
 import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.database.DataSetObserver; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.TextView; public class MyActivity extends Activity { private ExpandableListView mExpandableList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); mExpandableList = (ExpandableListView)findViewById(R.id.expandable_list); mExpandableList.setGroupIndicator(null); ArrayList arrayParents = new ArrayList(); ArrayList arrayChildren = new ArrayList(); //here we set the parents and the children for (int i = 0; i < 10; i++){ //for each "i" create a new Parent object to set the title and the children Parent parent = new Parent(); parent.setTitle("Parent " + i); arrayChildren = new ArrayList(); for (int j = 0; j < 10; j++) { arrayChildren.add("Child " + j); } parent.setArrayChildren(arrayChildren); //in this array we add the Parent object. We will use the arrayParents at the setAdapter arrayParents.add(parent); } //sets the adapter that provides data to the list. mExpandableList.setAdapter(new MyCustomAdapter(MyActivity.this,arrayParents)); } public class Parent { private String mTitle; private ArrayList mArrayChildren; public Ssortingng getTitle() { return mTitle; } public void setTitle(Ssortingng mTitle) { this.mTitle = mTitle; } public ArrayList getArrayChildren() { return mArrayChildren; } public void setArrayChildren(ArrayList mArrayChildren) { this.mArrayChildren = mArrayChildren; } } public class MyCustomAdapter extends BaseExpandableListAdapter implements OnClickListener{ private LayoutInflater inflater; private ArrayList mParent; public MyCustomAdapter(Context context, ArrayList parent){ mParent = parent; inflater = LayoutInflater.from(context); } @Override //counts the number of group/parent items so the list knows how many times calls getGroupView() method public int getGroupCount() { return mParent.size(); } @Override //counts the number of children items so the list knows how many times calls getChildView() method public int getChildrenCount(int i) { return mParent.get(i).getArrayChildren().size(); } @Override //gets the title of each parent/group public Object getGroup(int i) { return mParent.get(i).getTitle(); } @Override //gets the name of each item public Object getChild(int i, int i1) { return mParent.get(i).getArrayChildren().get(i1); } @Override public long getGroupId(int i) { return i; } @Override public long getChildId(int i, int i1) { return i1; } @Override public boolean hasStableIds() { return true; } @Override //in this method you must set the text to see the parent/group on the list public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) { if (view == null) { view = inflater.inflate(R.layout.list_item_parent, viewGroup,false); } view.findViewById(R.id.button).setTag(i); view.findViewById(R.id.button).setOnClickListener(this); TextView textView = (TextView) view.findViewById(R.id.list_item_text_view); //"i" is the position of the parent/group in the list textView.setText(getGroup(i).toSsortingng()); //return the entire view return view; } @Override //in this method you must set the text to see the children on the list public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) { if (view == null) { view = inflater.inflate(R.layout.list_item_child, viewGroup,false); } TextView textView = (TextView) view.findViewById(R.id.list_item_text_child); //"i" is the position of the parent/group in the list and //"i1" is the position of the child textView.setText(mParent.get(i).getArrayChildren().get(i1)); //return the entire view return view; } @Override public boolean isChildSelectable(int i, int i1) { return true; } @Override public void registerDataSetObserver(DataSetObserver observer) { /* used to make the notifyDataSetChanged() method work */ super.registerDataSetObserver(observer); } /* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) * @since Mar 20, 2013 * @author rajeshcp */ @Override public void onClick(View v) { if(mExpandableList.isGroupExpanded((Integer)v.getTag())) { mExpandableList.collapseGroup((Integer)v.getTag()); }else { mExpandableList.expandGroup((Integer)v.getTag()); } } } } 

Changez votre MyActivity comme ceci et faites-moi savoir ce que vous voulez d’autre?

assujettir:

  int width = getResources().getDisplayMesortingcs().widthPixels; if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { listView.setIndicatorBounds(width - getPixelValue(40), width - getPixelValue(10)); } else { listView.setIndicatorBoundsRelative(width - getPixelValue(40), width - getPixelValue(10)); } 

et méthode d'assistance:

 public static int getPixelValue(int dp) { final float scale = getResources().getDisplayMesortingcs().density; return (int) (dp * scale + 0.5f); } 

Il suffit de créer une vue / Imageview où vous voulez dans le xml de l’exemple d’élément de groupe:

    

Et puis, pour votre ExpandableListView, utilisez un GroupClickListener pour modifier l’image pour ImageView par programmation, par exemple:

 listView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { parent.smoothScrollToPosition(groupPosition); if (parent.isGroupExpanded(groupPosition)) { ImageView imageView = v.findViewById(R.id.expandable_icon); imageView.setImageDrawable(getResources().getDrawable(R.drawable.group_icon_not_expanded)); } else { ImageView imageView = v.findViewById(R.id.expandable_icon); imageView.setImageDrawable(getResources().getDrawable(R.drawable.group_icon_expanded)); } return false ; } });