El clic de GridView no funciona dentro de la vista de lista personalizada

Estoy utilizando gridview dentro de un ListView, pero tengo un problema que se puede enfocar.

He establecido el ancho de la vista de cuadrícula, pero relleno algunos elementos de gridview, en el espacio de la izquierda de gridview (que está en blanco) significa que los elementos no llenar de gridview en listview. Si hago clic en él, no realiza un clic de listitem

Introduzca aquí la descripción de la imagen

Como se indica en la imagen, deseo realizar un clic de elemento de vista de lista si se hace clic en cualquier parte del elemento de lista. Quiero obtener un clic de listitem .

Pero cuando hago clic en el elemento ListView , es decir, GridView , entonces el clic de ListItem no funciona …

 public class History extends Activity { String name, id, description, count, total; ArrayList<String> TAG_ID = new ArrayList<String>(); ArrayList<String> TAG_COFFEESHOP_NAME = new ArrayList<String>(); ArrayList<String> TAG_COUNT = new ArrayList<String>(); ArrayList<String> TAG_TOTAL = new ArrayList<String>(); Context context; JSONArray CoffeeUser = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listlayout); ListView listView = (ListView) findViewById(R.id.listnew); listView.setAdapter(new MyCustomAdapter()); listView.setTextFilterEnabled(true); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> paramAnonymousAdapterView, View paramAnonymousView, int paramAnonymousInt, long paramAnonymousLong) { Intent intent = new Intent(); intent.putExtra("coffeeshopid", ((TextView)paramAnonymousView.findViewById(R.id.hlcoffeeshopid)).getText() ); intent.setClass(getParent(), Stamps.class); HistoryStack hisStack = (HistoryStack) getParent(); hisStack.push("Stamps", intent); } }); } class MyCustomAdapter extends BaseAdapter { Context ctx; public MyCustomAdapter() { // Creating JSON Parser instance JSONParser jParser = new JSONParser(); SharedPreferences prfs = getSharedPreferences("GUID_FILE_NAME", Context.MODE_PRIVATE); JSONObject json = jParser.methodhistory("http://api.com"); try { // Getting Array of Employee CoffeeUser = json.getJSONArray("CoffeeUser"); // Looping of List for (int i = 0; i < CoffeeUser.length(); i++) { JSONObject c = CoffeeUser.getJSONObject(i); // Storing each json item in variable id = c.getString("CS_Id"); name = c.getString("ShopName"); count = c.getString("totalstamps"); total = c.getString("threshholdcount"); // Adding all get values into array if (name != "null") { TAG_COFFEESHOP_NAME.add(name); TAG_ID.add(id); TAG_TOTAL.add(total); TAG_COUNT.add(count); } } } catch (JSONException e) { e.printStackTrace(); } } @Override public int getCount() { return TAG_COFFEESHOP_NAME.size(); } @Override public Object getItem(int paramInt) { return TAG_COFFEESHOP_NAME.get(paramInt); } @Override public long getItemId(int paramInt) { return paramInt; } public class MyCustomHolder { public GridView localGrid; public TextView CoffeeShopName,coffeeshopsdescription,coffeeshopid; } @Override public View getView(int paramInt, View paramView,ViewGroup paramViewGroup) { View localView = paramView; MyCustomHolder holder = null; if (localView == null) { LayoutInflater inflater = (LayoutInflater) History.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); localView = inflater.inflate(R.layout.historylist, null); holder = new MyCustomHolder(); holder.CoffeeShopName = (TextView) localView.findViewById(R.id.hlcoffeeshopname); holder.coffeeshopid = (TextView) localView.findViewById(R.id.hlcoffeeshopid); holder.localGrid = (GridView) localView.findViewById(R.id.gridViewdistorylist); localView.setTag(holder); } else { holder = (MyCustomHolder) localView.getTag(); } holder.CoffeeShopName.setText(TAG_COFFEESHOP_NAME.get(paramInt)); holder.coffeeshopid.setText(TAG_ID.get(paramInt)); holder.localGrid.setAdapter(new GridAdapterA(History.this, TAG_TOTAL.get(paramInt), TAG_COUNT.get(paramInt))); holder.localGrid.setFocusable(false); holder.localGrid.setFocusableInTouchMode(false); holder.CoffeeShopName.setFocusable(false); holder.CoffeeShopName.setFocusableInTouchMode(false); localView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.putExtra("coffeeshopid", ((TextView)v.findViewById(R.id.hlcoffeeshopid)).getText() ); intent.setClass(getParent(), Stamps.class); HistoryStack hisStack = (HistoryStack) getParent(); hisStack.push("Stamps", intent); } }); return localView; } } public class GridAdapterA extends BaseAdapter { private Context context; String total,count; public GridAdapterA(Context context) { this.context = context; } public GridAdapterA(Context context, String total, String count) { // TODO Auto-generated constructor stub this.context = context; this.total = total; this.count = count; } public boolean areAllItemsEnabled() { return false; } public boolean isEnabled(int position) { return false; } public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View gridView; if (convertView == null) { gridView = new View(context); gridView = inflater.inflate(R.layout.customgrid_row, null); gridView.setFocusable(false); ImageView imageView = (ImageView) gridView.findViewById(R.id.grid_item_image); imageView.setFocusable(false); int i = 0; if(count!="null") i = Integer.parseInt(count); if (position<i ) { //imageView.setImageResource(R.drawable.ii); // textView.setText(gridlist[position]); } else { imageView.setImageResource(R.drawable.changedcup); // textView.setText(""); } } else { gridView = (View) convertView; } /*gridView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.putExtra("coffeeshopid", ((TextView)v.findViewById(R.id.hlcoffeeshopid)).getText() ); intent.setClass(getParent(), Stamps.class); HistoryStack hisStack = (HistoryStack) getParent(); hisStack.push("Stamps", intent); } });*/ return gridView; } @Override public int getCount() { int j=0; if(total!="null"){ j = Integer.parseInt(total); } return j; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } } } 

Lista de historiales

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/list_selector" android:orientation="horizontal" android:padding="5dip" > <LinearLayout android:id="@+id/thumbnail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginRight="5dip" android:background="@drawable/image_bg" android:padding="3dip" > <ImageView android:id="@+id/list_image" android:layout_width="50dip" android:layout_height="50dip" android:src="@drawable/rcup" /> </LinearLayout> <!-- hlcoffeeshopname Of Song --> <TextView android:id="@+id/hlcoffeeshopname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/thumbnail" android:layout_toRightOf="@+id/thumbnail" android:text="Rihanna Love the way lie" android:textColor="#040404" android:textSize="20dip" android:textStyle="bold" android:typeface="sans" /> <TextView android:id="@+id/hlcoffeeshopid" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" /> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridViewdistorylist" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_below="@+id/hlcoffeeshopname" android:layout_toRightOf="@+id/thumbnail" android:columnWidth="20dp" android:background="@null" android:descendantFocusability="blocksDescendants" android:focusable="false" android:focusableInTouchMode="false" android:numColumns="10" android:stretchMode="none" > </GridView> </RelativeLayout> 

Nuevo GetView

 @Override public View getView(int paramInt, View paramView, ViewGroup paramViewGroup) { View localView = paramView; MyCustomHolder holder = null; if (localView == null) { LayoutInflater inflater = (LayoutInflater) CopyOfHistory.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); localView = inflater.inflate(R.layout.copyhistorylist, null); holder = new MyCustomHolder(); holder.coffeeShopName = (TextView) localView.findViewById(R.id.hlcoffeeshopname); holder.coffeeshopid = (TextView) localView.findViewById(R.id.hlcoffeeshopid); localView.setTag(holder); } else { holder = (MyCustomHolder) localView.getTag(); } holder.coffeeShopName.setText(TAG_COFFEESHOP_NAME.get(paramInt)); holder.coffeeshopid.setText(TAG_ID.get(paramInt)); int looplimit = Integer.parseInt(TAG_TOTAL.get(paramInt)); for (int i = 0; i < looplimit; i++) { Log.e("loop", String.valueOf(looplimit)); ImageView imageView = new ImageView(CopyOfHistory.this); if (i < Integer.parseInt(TAG_COUNT.get(paramInt))) { imageView.setImageDrawable(getResources().getDrawable(R.drawable.ii)); } else { imageView.setImageDrawable(getResources().getDrawable(R.drawable.iii)); } RelativeLayout layout = (RelativeLayout) localView.findViewById(R.id.hlrlayout); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(30,30); params.setMargins(i*40, 0, 0, 0); imageView.setLayoutParams(params); layout.addView(imageView); //holder.relativeLayout = new RelativeLayout(); } holder.coffeeShopName.setFocusable(false); holder.coffeeShopName.setFocusableInTouchMode(false); localView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.putExtra("coffeeshopid", ((TextView) v .findViewById(R.id.hlcoffeeshopid)).getText()); intent.setClass(getParent(), Stamps.class); HistoryStack hisStack = (HistoryStack) getParent(); hisStack.push("Stamps", intent); } }); return localView; } 

5 Solutions collect form web for “El clic de GridView no funciona dentro de la vista de lista personalizada”

Puede que lo hayas solucionado, pero tengo otra solución que puede ayudar a alguien.

Utilice android:descendantFocusability="beforeDescendants" en el diseño raíz de su XML de list_cell.

Orden para tener listas dentro de otras listas. Debe generar una vista personalizada. Si quieres una simple, que consiste en una clase Java y un archivo XML, entonces en el código sólo tiene que instanciarlo y agregarlo a un diseño lineal.

Aquí dejo un pequeño ejemplo.

XML

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" > <TextView android:id="@+id/txtAltaPropinaTextoAyudaTipo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:gravity="center_vertical" android:text="-" android:textColor="#000000" android:textSize="18sp" android:textStyle="bold" /> <TextView android:id="@+id/txtListadoZonasNombreZona" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginRight="5dp" android:layout_marginTop="5dp" android:layout_toLeftOf="@+id/txtAltaPropinaTextoAyudaTipo" android:layout_toRightOf="@+id/txtAltaPropinaTextoAyudaTipo" android:singleLine="true" android:text="TextView" android:textColor="#000000" /> </RelativeLayout> 

Código Java

 public class CVTexto extends RelativeLayout { public TextView txtTexto; public int idCv; public CVTexto(Context context) { super(context); // TODO Auto-generated constructor stub IniciarCuadro(); } public CVTexto(Context context, AttributeSet attrs) { super(context, attrs); IniciarCuadro(); } public CVTexto(Context context, AttributeSet attrs, int defStyle) { super( context, attrs, defStyle ); IniciarCuadro(); } private void IniciarCuadro() { //Utilizamos el layout 'control_login' como interfaz del control String infService = Context.LAYOUT_INFLATER_SERVICE; LayoutInflater li = (LayoutInflater)getContext().getSystemService(infService); li.inflate(R.layout.ll_adapter_listado_zonas_asignadas_usuario, this, true); AsignarElemetos(); //Obtenemoslas referencias a los distintos control //Asociamos los eventos necesarios // asignarEventos(); } private void AsignarElemetos(){ txtTexto = (TextView)findViewById(R.id.txtListadoZonasNombreZona); } } 

Añadir a linearlayout:

 cvTextp objCV = new cvTexto(context); LinearLayout.addView(objCv); 

Y eliminar vistas:

 LinearLayout.removeallViews; 

Conseguí esta respuesta cambiando la disposición de la rejilla a LinearLayout. He añadido elementos dinámicamente en linearLayout, y luego mi problema fue resuelto.

He hecho la investigación en él y consigo saber que dentro de un widget scrollable que utilice un adaptador usted no debe utilizar ningún otro widget que sea scrollable que también utilice un adaptador tal como gridview dentro de listview debido a la complejidad de los acontecimientos del tacto.

Así que creo que debería pasar a otro enfoque para esto. En su caso, puede agregar un diseño lineal y puede agregar imágenes de copa dinámicamente en ese diseño configurando parámetros. espero que esto te ayude.

No sé cómo su código abajo está trabajando, pero si quisiera manejar cada oyente en-tecleo de cada entonces haría algo como abajo.

 for (int i = 0; i < looplimit; i++) { Log.e("loop", String.valueOf(looplimit)); ImageView imageView = new ImageView(CopyOfHistory.this); if (i < Integer.parseInt(TAG_COUNT.get(paramInt))) { imageView.setImageDrawable(getResources().getDrawable(R.drawable.ii)); } else { imageView.setImageDrawable(getResources().getDrawable(R.drawable.iii)); } RelativeLayout layout = (RelativeLayout) localView.findViewById(R.id.hlrlayout); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(30,30); params.setMargins(i*40, 0, 0, 0); imageView.setLayoutParams(params); layout.addView(imageView); //holder.relativeLayout = new RelativeLayout(); // Handle your each on-click of dynamic added view while they added in getview() method imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Do what is necessary } }); } 

No sé cómo su código abajo está trabajando, pero si quisiera manejar cada oyente en-tecleo de cada entonces haría algo como abajo.

 for (int i = 0; i < looplimit; i++) { Log.e("loop", String.valueOf(looplimit)); ImageView imageView = new ImageView(CopyOfHistory.this); if (i < Integer.parseInt(TAG_COUNT.get(paramInt))) { imageView.setImageDrawable(getResources().getDrawable(R.drawable.ii)); } else { imageView.setImageDrawable(getResources().getDrawable(R.drawable.iii)); } RelativeLayout layout = (RelativeLayout) localView.findViewById(R.id.hlrlayout); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(30,30); params.setMargins(i*40, 0, 0, 0); imageView.setLayoutParams(params); layout.addView(imageView); //holder.relativeLayout = new RelativeLayout(); // Handle your each on-click of dynamic added view while they added in getview() method imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Do what is necessary } }); } 
  • Listview duplica el elemento cada 6 veces
  • Listview y CustomAdapter que amplían SimpleCursorAdapter
  • React Native ListView TextInput se bloquea desde la renderización de optimización de rendimiento
  • Cómo agregar EditText en listview y obtener su valor dinámicamente en todas las filas?
  • Android API 21 - vista de pie de página IndexOutOfBoundsException
  • Cómo utilizar "Android-Universal-Image-Loader"
  • Android ==> ListView quedarse seleccionado?
  • ViewPager dentro de ListView
  • ¿Cómo hacer una galería de imágenes de 2 dimensiones con desplazamiento horizontal y vertical?
  • OnItemClickListener en un ListView dentro de un fragmento no funciona
  • Generar listview desde JSON en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.