evento buttons java android onclick expandablelistview

java - buttons - Onclick listner a listview expandible



onclicklistener button java (3)

Creé una vista de lista ampliable, pero no se pudo adjuntar el oyente onclick a los elementos de la lista infantil.

El código de actividad:

public class MyActivity extends Activity { private ExpandableListView mExpandableList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mExpandableList = (ExpandableListView)findViewById(R.id.expandable_list); ArrayList<Parent> arrayParents = new ArrayList<Parent>(); ArrayList<String> arrayChildren = new ArrayList<String>(); //here we set the parents and the children for (int i = 0; i < 2; 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<String>(); for (int j = 0; j < 3; 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)); } }

El adaptador personalizado para las listas :

public class MyCustomAdapter extends BaseExpandableListAdapter { private LayoutInflater inflater; private ArrayList<Parent> mParent; public MyCustomAdapter(Context context, ArrayList<Parent> 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); } 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).toString()); //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); } }

La clase de padres :

public class Parent { private String mTitle; private ArrayList<String> mArrayChildren; public String getTitle() { return mTitle; } public void setTitle(String mTitle) { this.mTitle = mTitle; } public ArrayList<String> getArrayChildren() { return mArrayChildren; } public void setArrayChildren(ArrayList<String> mArrayChildren) { this.mArrayChildren = mArrayChildren; } }

¿Qué debo hacer para agregar un oyente clic en los elementos de la lista infantil?


Agregue esto después de configurar el Adaptador de la lista desplegable

mExpandableList.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) { /* You must make use of the View v, find the view by id and extract the text as below*/ TextView tv= (TextView) v.findViewById(R.id.childTextView); String data= tv.getText().toString(); return true; // i missed this } });


Declare su lista de lista con un reemplazado enChildClick

ExpandableListView listView = getExpandableListView(); listView.setChoiceMode(ExpandableListView.CHOICE_MODE_SINGLE); listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition,long id) { Log.d(TAG,"I got clicked childPosition:["+childPosition+"] groupPosition:["+groupPosition+"] id:["+id+"]"); return true; } });


Necesitas agregar

ChildClickListener

de esta manera: mExpandableList.setOnChildClickListener agregue esta línea al método onCreate lea aquí

también este es un buen ejemplo