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.
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 ; } });