Acceso a TextView de viewview de groupview desde getChildView () de ExpandableListView

Estoy intentando tener acceso a un textview de GroupView que demuestra la cuenta de la caja de cheque seleccionada en ChildView. Introduzca aquí la descripción de la imagen

Por ejemplo, – Norte es el GroupView, y la lista a continuación con la casilla de verificación es ChildView. Quiero actualizar la cuenta (18) con cada clic en la casilla de verificación. He aplicado OnClickListner en la casilla de verificación. Tengo ExpanadableListViewAdapter personalizado extiende BaseExpandableListAdapter.

Aquí está mi fragmento de código –

@Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.filter_expandable_list_group, parent, false); groupViewHolder = new GroupViewHolder(); groupViewHolder.GroupName = (TextView) convertView.findViewById(R.id.group_name); groupViewHolder.GroupCount = (TextView) convertView.findViewById(R.id.group_count); groupViewHolder.rightArrow = (ImageView) convertView.findViewById(R.id.right_arrow); convertView.setTag(groupViewHolder); }else{ groupViewHolder = (GroupViewHolder) convertView.getTag(); } groupViewHolder.GroupName.setText(((OutletListData) getGroup(groupPosition)).getName()); groupViewHolder.GroupCount.setText(""+((OutletListData) getGroup(groupPosition)).getOutletDatas().size()); return convertView; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.filter_expandable_list_child, parent, false); childViewHolder = new ChildViewHolder(); childViewHolder.childTextView = (TextView) convertView.findViewById(R.id.text1); childViewHolder.childCheckBox = (CheckBox) convertView.findViewById(R.id.checkbox); convertView.setTag(childViewHolder); }else{ childViewHolder = (ChildViewHolder) convertView.getTag(); } childViewHolder.childTextView.setText(((OutletData) getChild(groupPosition, childPosition)).getDealerName()); childViewHolder.childCheckBox.setChecked(((OutletData) getChild(groupPosition, childPosition)).getSelected() == "1"); childViewHolder.childCheckBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean isChecked = ((CheckBox) v).isChecked(); ApplicationController.getEventBus().post(((OutletData) getChild(groupPosition, childPosition)).getOutletID()); if (isChecked) { ((OutletData) getChild(groupPosition, childPosition)).setSelected("1"); } else { ((OutletData) getChild(groupPosition, childPosition)).setSelected("0"); } } }); return convertView; } 

En primer lugar, tome ejemplo de la vista de lista simple, no la vista de lista expandible. ListView es el contenedor que contiene un montón de elementos.
Esos elementos tienen vistas secundarias que consisten en los elementos individuales que forman una fila en el ListView. Diferentes textViews, etc.
El getView () del adaptador, funciona en el conjunto de datos y luego crea elementos en la lista. Por lo tanto, si cambia el conjunto de datos que se utiliza para crear el adaptador y llama a notifyDatasetChanged (), actualiza la vista de lista.

Ahora en su caso, Usted puede estar usando una ArrayList para representar los objetos como "NORTH". Así que si almacena el valor de count en este objeto, entonces la actualización de count será fácil. Sólo tiene que acceder a los datos de la lista mediante groupPosition y actualizarlos. Y llama a la notifyDatasetChanged.

Digamos que utilizaste mList que es ArrayList del tipo Object, para crear el adaptador

 // ArrayList<Object> mList; // You created mAdapter from this mList // now mList is data set for this adapter 

Así que en getChildView () escribes:

 @Override public void onClick(View v) { boolean isChecked = ((CheckBox) v).isChecked(); ApplicationController.getEventBus().post(((OutletData) getChild(groupPosition, childPosition)).getOutletID()); if (isChecked) { // your code int count = ((OutletListData) getGroup(groupPosition)).getCount(); count++; ((OutletListData) getGroup(groupPosition)).setCount(count); notifyDataSetChanged(); } else { // your code; int count = ((OutletListData) getGroup(groupPosition)).getCount(); count--; ((OutletListData) getGroup(groupPosition)).setCount(count); notifyDataSetChanged(); } } 

Ahora la única limitación a este enfoque es que el recuento debe ser una parte de Object. Por lo tanto, si está iniciando la cuenta por primera vez desde algún otro lugar, pero no desde el propio objeto, le recomendaré que almacene el recuento en el propio objeto e inicialice el valor de textView desde allí.
Así que en getGroupView ()

 groupViewHolder.GroupCount.setText(""+((OutletListData) getGroup(groupPosition)).getCount()); 
  • Obtener enlace de clic de evento en una vista web Android
  • Cómo pasar un valor de cadena a webView de una actividad
  • Refresh ExpandableListView al agregar datos: keep state
  • OnTouch funciona, pero OnClickListener no?
  • ¿Es posible pasar un onTouchEvent a varias vistas en Android?
  • Cómo obtener el estado de la casilla de verificación en el listview expandible en android
  • ¿Equivalente de selectores de clases CSS para las vistas de Android?
  • Ciclo de vida de Android View
  • ¿Cuál es la manera correcta de ampliar EditText para darle funcionalidad adicional "predeterminada"
  • Id de vista siguiente como un atributo personalizado en android
  • Custom Seekbar con efecto de enmascarar con dos estirables?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.