una texto studio personalizada lista hacer desplegable crear contactos como android expandablelistview

personalizada - lista de texto android studio



La vista de lista expandible en Android no reacciona al hacer clic, no se expande (2)

Tengo una vista de lista expandible. He puesto algunos datos ficticios y todo parece estar bien, pero cuando ejecuto la aplicación, todos los grupos están en modo de contracción y no tienen efecto cuando hago clic en cada uno de ellos. Esta es la captura de pantalla:

El XML del grupo es:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/bg_slider" android:orientation="horizontal" > <TextView android:id="@+id/tvRecipeName" style="@style/normal_text.bold" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="50dp" android:layout_marginRight="5dp" android:focusable="false" android:lines="1" android:maxLines="1" android:text="@string/dd_title" /> <ImageButton android:id="@+id/ibDeleteRecipe" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="15dp" android:background="@color/transparent" android:contentDescription="@string/cd" android:focusable="false" android:src="@android:drawable/ic_menu_delete" /> <View android:layout_width="1dp" android:layout_height="50dp" android:layout_alignParentLeft="true" android:layout_toLeftOf="@+id/tvRecipeName" android:focusable="false" /> </RelativeLayout>

XML de niño es:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/White" android:gravity="left|center_vertical" > <View android:layout_width="1dp" android:layout_height="35dp" android:layout_toLeftOf="@+id/tvIngredient" android:focusable="false" /> <TextView android:id="@+id/tvIngredient" style="@style/normal_text_black" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="30dp" android:layout_marginRight="5dp" android:lines="1" android:maxLines="1" android:text="@string/dd_title" android:focusable="false" /> <ImageButton android:id="@+id/ibDeleteIngredient" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="15dp" android:background="@color/transparent" android:contentDescription="@string/cd" android:focusable="false" android:src="@android:drawable/btn_dialog" /> </RelativeLayout>

y en main.xml, la definición de lista expandible es:

<ExpandableListView android:id="@+id/elv" android:layout_width="match_parent" android:layout_height="match_parent" />

Tengo un adaptador que he escrito este código para eso:

public class ExpAdapter extends BaseExpandableListAdapter { private final String TAG = "ExpAdapter"; private Context context; static final String arrGroupelements[] = {"India", "Australia", "England", "South Africa"}; static final String arrChildelements[][] = { {"Sachin Tendulkar", "Raina", "Dhoni", "Yuvi" }, {"Ponting", "Adam Gilchrist", "Michael Clarke"}, {"Andrew Strauss", "kevin Peterson", "Nasser Hussain"}, {"Graeme Smith", "AB de villiers", "Jacques Kallis"} }; public ExpAdapter(Context context) { this.context = context; Log.i(TAG, "Adapter created."); } @Override public Object getChild(int groupPosition, int childPosition) { return null; } @Override public long getChildId(int groupPosition, int childPosition) { return 0; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.elv_child, null); } TextView tvItem = (TextView) convertView.findViewById(R.id.tvIngredient); ImageButton ibDelete = (ImageButton) convertView.findViewById(R.id.ibDeleteIngredient); ibDelete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.i(TAG, "******"); } }); tvItem.setText(arrChildelements[groupPosition][childPosition]); return convertView; } @Override public int getChildrenCount(int groupPosition) { return arrChildelements[groupPosition].length; } @Override public Object getGroup(int groupPosition) { return null; } @Override public int getGroupCount() { return arrGroupelements.length; } @Override public long getGroupId(int groupPosition) { return 0; } @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.elv_group, null); } TextView tvItem = (TextView) convertView.findViewById(R.id.tvRecipeName); ImageButton ibDeleteRcipe = (ImageButton) convertView.findViewById(R.id.ibDeleteRecipe); ibDeleteRcipe.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.i(TAG, "%%%%%%"); } }); tvItem.setText(arrGroupelements[groupPosition]); return convertView; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }

y finalmente, en el código de actividad de fragmentos tengo:

public class ShoppingList extends FragmentActivity { ExpAdapter adapter = new ExpAdapter(this); //Linking expnadable list view expListView = (ExpandableListView) findViewById(R.id.elv); expListView.setAdapter(adapter); expListView.setOnGroupExpandListener(new OnGroupExpandListener() { @Override public void onGroupExpand(int groupPosition) { Log.i(TAG, "Group " + groupPosition + " expanded."); } }); expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() { @Override public void onGroupCollapse(int groupPosition) { Log.i(TAG, "Group " + groupPosition + " collapsed."); } }); expListView.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Log.i(TAG, "item " + childPosition + " of group " + groupPosition + " clicked."); return false; } }); }

Cuando ejecuto la aplicación y hago clic en los padres, no pasa nada. Intenté agregar las siguientes líneas de código al final de la clase de compras:

int count = adapter.getGroupCount(); for (int position = 1; position <= count; position++) expListView.expandGroup(position - 1);

Ahora cuando ejecuto el resultado de la aplicación es como esta captura de pantalla:

Si hago clic en los botones de eliminación (principal o secundario), puedo ver que surten efecto (al revisar logcat), sin embargo, cuando hago clic en secundario o principal, no ocurre nada. Entonces, no tengo idea de por qué las devoluciones de llamada no funcionan. Basándome en mi investigación, encontré que necesito configurar Focussable de botones de imagen en false . Como puede ver en los archivos XML, lo hice, pero aún cuando hago clic en las filas primarias y secundarias no puedo ver ninguna respuesta.


Es necesario definir android:focusable="false" en el diseño xml para vistas enfocadas dentro del elemento de vista de lista expandible pero no en el atributo " ExpandableListView ".

Por ejemplo: si un elemento de la lista de padres personalizado incluye una casilla de verificación (se enfocará automáticamente) debería ser como a continuación.

<CheckBox android:id="@+id/cbkSelectDownload" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false"/>


Finalmente encontré la solución :)

No tengo idea de que sea un error o una enfermedad o ...

Como se mencionó anteriormente, en base a mi investigación, descubrí que necesitamos establecer la capacidad de enfoque de la vista / cuadro de imagen en "falso". Lo hice en un archivo XML y no funcionó. Establecí focus -ability en "true" en XML y en código lo puse en false. Me gusta esto:

@Override public View getGroupView(final 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.elv_group, null); } TextView tvItem = (TextView) convertView.findViewById(R.id.tvRecipeName); ImageButton ibDeleteRcipe = (ImageButton) convertView.findViewById(R.id.ibDeleteRecipe); ibDeleteRcipe.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ... } }); ibDeleteRcipe.setFocusable(false); tvItem.setText(arrGroupElements[groupPosition]); return convertView; }

Por lo tanto basado en mi logro! se debe establecer en "falso" en código no en XML! Ahora la pregunta es ¿Qué es la diferencia? -No tengo idea.