Android ExpandableListView y onChildClick no funciona
He estado leyendo un montón de temas con el mismo problema que tengo, pero no puedo entender lo que está sucediendo. Tengo una vista de lista expandible, pero no puedo hacer que el onChildClickListener funcione. El onGroupClickListener está funcionando bien, pero realmente no lo necesito. Miré muchos ejemplos y todos parecen ser como los míos. Aquí está el código:
import android.app.Activity; import android.app.ExpandableListActivity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.ExpandableListView.OnGroupClickListener; import android.widget.ListView; import android.widget.Toast; import org.ektorp.CouchDbConnector; import org.ektorp.DbAccessException; import org.ektorp.android.util.EktorpAsyncTask; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import android.widget.TextView; public class MainActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EktorpAsyncTask getUsersTask = new EktorpAsyncTask() { @Override protected void doInBackground() { //here i connect to de BD and fill the Group and Children arrays } @Override protected void onSuccess() { UserArrayExpandableAdapter adapter = new UserArrayExpandableAdapter(getApplicationContext(),parentsChilds.getParents(), parentsChilds.getChilds()); ExpandableListView expandableList = (ExpandableListView) findViewById(R.id.userview); expandableList.setAdapter(adapter); expandableList.setClickable(true); expandableList.setOnGroupClickListener(new OnGroupClickListener(){ @Override public boolean onGroupClick(ExpandableListView arg0, View arg1, int groupPosition, long arg3) { return false; } }); expandableList.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView arg0, View arg1, int arg2, int arg3, long arg4) { Toast.makeText(getBaseContext(), "Child clicked", Toast.LENGTH_LONG).show(); return false; } });
Vista del niño:
- OnTouch funciona, pero OnClickListener no?
- Android WebView no sólo de vídeo audio
- La construcción de un visor de modelo 3d Android?
- Cómo cambiar el tamaño de la imagen al pulsar
- Consiga enfocado View from ViewPager
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" android:orientation="vertical" android:clickable="true" android:focusable="true"> <TextView android:id="@+id/day" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/DarkSeaGreen" android:paddingLeft="8dp" android:paddingBottom="4dp" android:textColor="@color/White" android:textSize="18sp" android:textStyle="bold" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip" android:clickable="true" android:focusable="true"> <TextView android:id="@+id/subject" android:layout_width="fill_parent" android:layout_height="26dip" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:ellipsize="marquee" android:singleLine="true" android:textSize="12sp" /> <TextView android:id="@+id/name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_alignWithParentIfMissing="true" android:gravity="center_vertical" android:textStyle="bold" android:textSize="16sp" /> </RelativeLayout> </LinearLayout>
Distribución del grupo:
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:paddingBottom="5dp" > <TextView android:id="@+id/monthText" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="26sp" android:background="@color/SkyBlue" android:textColor="@color/White" android:textStyle="bold" /> </LinearLayout>
Disposición MainActivity:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".LoginActivity" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <ExpandableListView android:id="@+id/userview" android:layout_width="match_parent" android:layout_height="wrap_content" > </ExpandableListView> </RelativeLayout>
Código del adaptador:
public class UserArrayExpandableAdapter extends BaseExpandableListAdapter { private final Context context; private final ArrayList<ArrayList<EventVO>> childs; private ArrayList<String> parents; public UserArrayExpandableAdapter(Context context, ArrayList<String> parents,ArrayList<ArrayList<EventVO>> childs) { this.context = context; this.childs = childs; this.parents = parents; } @Override public Object getChild(int arg0, int arg1) { return childs.get(arg0).get(arg1); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { List<EventVO> child = (ArrayList<EventVO>) childs.get(groupPosition); if (convertView == null){ LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.user_view, parent, false); } TextView nameView = (TextView) convertView.findViewById(R.id.name); TextView dateView = (TextView) convertView.findViewById(R.id.day); TextView subjectView = (TextView) convertView.findViewById(R.id.subject); nameView.setText(child.get(childPosition).getName()); String day = child.get(childPosition).getDate(); day = DateTransformer.getDay(day); dateView.setText(day); subjectView.setText(child.get(childPosition).getSubject()); return convertView; } @Override public int getChildrenCount(int groupPosition) { return childs.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { return parents.get(groupPosition); } @Override public int getGroupCount() { return parents.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView==null) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.parent_view, parent, false); } TextView monthView = (TextView) convertView.findViewById(R.id.monthText); monthView.setText(parents.get(groupPosition)); return convertView; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }
Muchas gracias.
- Creación de un libro que almacena la vista de cuadrícula en android
- Android View.bringToFront () causa parpadeo
- Android Take Captura de pantalla de Vista de superficie muestra negro
- Barra de búsqueda personalizada con los bordes cortados
- Cómo traer una vista al frente sin llamar bringToFront ()?
- Arquitectura de la GUI de Android - relación entre Superficie / vista / ventana / lienzo
- El fondo de vista de Android cambia inesperadamente
- Diseño de vistas personalizadas
Yo tuve el mismo problema. Los childs de mi ExpandableListView tenían dos ImageViews y TextView. Establecer la propiedad TextView: focusable a "false" en el archivo de diseño resolvió el problema. Curiosamente, el mismo código (sin configurar la propiedad focusable) funcionó bien en API8 pero cuando se ejecutó en el emulador API16, childs no respondió al clic.
- SoundPool de Android tartamudea, retrasa, a veces no juega en absoluto
- Establecer visibilidad no funciona imageview