Tengo un Gridview llenado por un Adaptador que devuelve LinearLayouts cada uno contiene un ImageButton y TextView.

En el adaptador yo soy la unión de una onClick y onLongClick evento para el ImageButton.

Estoy tratando de enlazar OnItemClickListener para el gridview, pero no sé por qué, que la onItemclicked nunca disparó hacia arriba.

Es mi 6 horas sin nada.

Por el camino;
OnItemSelectListener funciona a la perfección en la parrilla.

Estoy comprobando si alguna pieza de código accidentalmente se encarga de la onItemClicked pero no podía coger sin embargo.

Necesito ayuda chicos.

gridView = (GridView) layoutInflater.inflate(R.layout.gridview, null);
gridView.setOnItemClickListener(new ItemClickListener());
. 
.
.

//inner handler class
class ItemClickListener implements AdapterView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        Toast.makeText(mainActivity.getApplicationContext(),view + " clicked at pos " +            
        i,Toast.LENGTH_SHORT).show();
    }
}
  • Hay alguna excepción en el LogCat?
  • no. ya que yo no captura cualquier excepción me gustaría de ver la aplicación se estrelló. no lo haría ??
  • Yo no veo nada malo con este código, quizás el problema está en otro lugar.
  • Yo no podía entenderlo así. Vi un montón de mensajes sobre el onITemClickHandler. Por eso quería escribir aquí para ayudar. Lo curioso es; funciona para OnItemSelectHandler 🙂
  • Android no le gusta cuando se coloca un artículo clickable dentro de otra «hacer clic en» elemento (por ejemplo, el elemento de cuadrícula). Me gustaría tomar el ImageButton y ver si se obtiene el onClickListener de disparo. Si ese es el problema, hay maneras de obtener los oyentes a trabajar.
  • gracias por tu gran ayuda. que realmente trabajó a cabo. La solución es no hacer clic en el objeto de la cuadrícula. Usted puede controlar el evento click de otros objetos, pero no un defecto puede hacer clic objeto. En mi caso, tengo que mostrar al usuario una imagen y también que la imagen necesita ser hecho clic. Así que primero elegir el uso de la ImagenBotón, Pero ahora estoy usando el ImaveViews y parece que trabaja un poco.
  • puede saber más acerca de las formas para obtener los oyentes funciona ? Es problemmatic para mi forma de solución ? que el uso de ImageView en lugar de ImageButton.

InformationsquelleAutor Olgun Kaya | 2011-11-18

6 Comentarios

  1. 78

    No utilice puede hacer clic en objetos en la cuadrícula. En caso de que Android no puede manejar el evento click de GridView.

    Lugar, se utilizan para mostrar una interfaz de usuario similar a la vista. Luego de la manija del objeto que haga clic en acciones.

    No: poner Button en el GridView para realizar algún haga clic en acciones.

    Hacer: poner ImageView en lugar de ImageButton y manejar ImageView‘s haga clic en eventos.

    • Por ejemplo, en una subclase de AdapterView dentro de una subclase de GridView: @Override public View getView(final int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(getContext()); imageView.setOnClickListener(new OnClickListener() { @Override onClick(View v) { if (getOnItemClickListener() != null) { getOnItemClickListener().onItemClick(MyGridView.this, v, position, getItemId(position)); } return imageView; }
    • stackoverflow.com/questions/36474607/… Puede usted por favor mira este similar efectivo?
  2. 13

    Si usted quiere usar Button o ImageButton entonces usted necesita para escribir estos atributos en el código xml de los widgets.

    android:focusable="false"
    android:focusableInTouchMode="false"

    Sus obras para mí.

    Pero en GridView, Trate de evitar el uso de estos aparatos. Se puede usar cualquier otro de los widgets en el lugar de estas (Como ImageView o cualquier otro).

    • Por extraño que parezca, esto funciona y todavía te permite tocar y activar el botón si se establece un onclicklistener para ello, pero permite que usted haga clic en el elemento de cuadrícula si usted toca en cualquier otro lugar, como se desee.
    • Tuve que poner que tanto para los niños y para los padres de las vistas. Incluyendo los diseños y de la «no-hacer clic en» vistas. Raro, ¿no?
    • gran respuesta. Muchas gracias MPG!
  3. 3

    También asegúrese de que su ListAdpter devuelve true para

    public boolean isEnabled(int _position)

    para la posición que usted desea, haga clic en.

  4. 1

    Hola guyz, finalmente tengo una solución…

    lo que estamos haciendo es acceder directamente a la presentación dentro del GridView, por lo que el onItemClickListener le resulta confuso para tener acceso al elemento.

    Por lo que la solución es aplicar el onClickListener en el interior del Adaptador (es decir, normalmente ArrayAdapter)

    así que lo que estoy tratando de decir es:

    public View getView(int position, View convertView, ViewGroup parent) {
    
                //Here row is a view and we can set OnClickListener on this
        final View row;
        ViewHolder holder = null;
    
        if (convertView == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            //Here we inflate the layout to view (linear in my case)
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new ViewHolder();
            holder.imageTitle = (TextView) row.findViewById(R.id.text);
            holder.image = (ImageView) row.findViewById(R.id.image);
            row.setTag(holder);
        } else {
            row = convertView;
            holder = (ViewHolder) row.getTag();
        }
    
        ImageItem item = data.get(position);
        holder.imageTitle.setText(item.getTitle());
        holder.image.setImageBitmap(item.getImage());
    
        //Now get the id or whatever needed
        row.setId(position);
        //Now set the onClickListener
        row.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                //TODO Auto-generated method stub
                Toast.makeText(context, "Clicked" + row.getId() + "!!",
                        Toast.LENGTH_SHORT).show();
            }
        });
        return row;
    }
  5. 0

    Me encuentro con el mismo problema, debido a varias razones.
    Así que, he aquí mis consejos:

    1. Extender BaseAdapter para su adaptador;
    2. Uso OnClickListener dentro de la getView en el adaptador en lugar de configuración OnItemClickListener para GridView;
    3. Evitar el establecimiento de LayoutParams varias veces;
    4. Comprobar si la posición = 0, no uso convertView, inflar nueva Ver;
    5. Conjunto OnClickListener no sólo para los padres Ver, pero para cualquier niño Ver, si los hubiere;
    6. Hacer todos sus Vers se puede hacer clic.

    Acabo de probar en 4 dispositivos, y esta solución funciona como se esperaba. La esperanza, que le ayudará en su caso.
    Me corrija, si he hecho algo mal.

    Diseño de código XML:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="#273238"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:padding="1dp">
    
    <ImageView
        android:id="@+id/open_image_item_imageview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/loh"
        android:clickable="true"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:scaleType="centerCrop"/>
    <TextView
        android:id="@+id/open_image_item_textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_gravity="bottom"
        android:padding="4dp"
        android:textSize="10sp"
        android:ellipsize="start"
        android:background="#55000000"
        android:textColor="#FFFFFF"
        android:text="image name"/>
    
    </FrameLayout>

    Adaptador de código Java:

     @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            View view = null;
            if(convertView != null && position != 0)
                view = convertView;
            else{
                view = LayoutInflater.from(getContext()).inflate(R.layout.open_image_item_layout, null, false);
                view.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, size));
            }
    
            TextView textView = (TextView)view.findViewById(R.id.open_image_item_textview);
            ImageView imageView = (ImageView)view.findViewById(R.id.open_image_item_imageview);
    
            ...
    
            View.OnClickListener onClickListener = getOnClickListener(files[position]);
            view.setOnClickListener(onClickListener);
            textView.setOnClickListener(onClickListener);
            imageView.setOnClickListener(onClickListener);
    
            return view;
        }

Dejar respuesta

Please enter your comment!
Please enter your name here