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.
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.
- Tamaño del texto del hilandero Android
- Obtener ids de vista en un bucle for por programa?
- Vista de Android WebView
- ¿Es posible cambiar el navegador / motor predeterminado para la vista Web de Android?
- Cómo obtener el nombre de la imagen de ImageView en Android?
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; }
- Agregue un onClickListener en Default GroupIndicator en ExpandableListView
- Android: aplica una transformación arbitraria a una vista
- imagen de ajuste de androide en imagen
- Cómo configurar la sombra de una vista en Android?
- Presentar contenido html como "páginas dinámicas"
- Retener completamente WebView en fragmento tras rotación
- Android 4.1 webview javascript no funciona.
- Cuando establezco MinimumHeight, ¿qué unidades estoy usando?
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());