2012-08-13 7 views
6

He estado sufriendo con un problema desde hace 2 días. Tengo una vista de cuadrícula en la que necesito mostrar imágenes. Cuando hago clic en el elemento de la cuadrícula, tengo que pasar a la siguiente actividad. Puedo mostrar imágenes en gridview pero sucede que cuando hago clic en ese elemento no responde ... (OnItemClickListener no funciona). No pude localizar mi problema donde he hecho mal.GridView.setOnItemClickListener no funciona

  package com.logictreeit.mobilezop.fragments; 

    import android.app.Activity; 
    import android.content.Context; 
    import android.os.Bundle; 
    import android.support.v4.app.Fragment; 
    import android.util.Log; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.AdapterView; 
    import android.widget.AdapterView.OnItemClickListener; 
    import android.widget.GridView; 

    import com.logictreeit.mobilezop.adapters.PhotoAdapter; 
    import com.logictreeit.mobilezop.custom.Utils; 

     public class Dup_AlbumPhotosFragment extends Fragment implements 
       OnItemClickListener { 

private static final String TAG = "AlbumPhotos Fragment"; 
private GridView gridView; 
private Context mContext; 
private PhotoAdapter photoAdapter; 

public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    Log.v(TAG, "on Activity Created "); 

} 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    this.mContext = activity; 
} 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    Log.v(TAG, "OnCreateView"); 
    gridView = new GridView(mContext); 
    gridView.setNumColumns(GridView.AUTO_FIT); 
    gridView.setClickable(true); 
    gridView.setOnItemClickListener(this); 
    photoAdapter = new PhotoAdapter(mContext,     -1,Utils.getALbumList().get(0).getPhotosList()); 
    gridView.setAdapter(photoAdapter); 
    return gridView; 
} 

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    Log.v(TAG, "on ItemClikced"); 

} 

     } 

Esta es mi Fragmento ..

  package com.logictreeit.mobilezop.adapters; 

     import java.util.List; 

     import android.content.Context; 
     import android.view.LayoutInflater; 
     import android.view.View; 
     import android.view.ViewGroup; 
     import android.widget.ArrayAdapter; 
     import android.widget.CheckBox; 
     import android.widget.CompoundButton; 
     import android.widget.CompoundButton.OnCheckedChangeListener; 
     import android.widget.ImageView; 

     import com.logictreeit.mobilezop.R; 
     import com.logictreeit.mobilezop.models.Photo; 

      public class DupPhotoAdapter extends ArrayAdapter<Photo> { 
      private static final String TAG = "PhotoAdapter"; 
      private Context context; 
private List<Photo> photoList; 

public DupPhotoAdapter(Context context, int textViewResourceId, 
     List<Photo> objects) { 
    super(context, textViewResourceId, objects); 
    this.context = context; 
    this.photoList = objects; 
} 

public int getCount() { 
    return photoList.size(); 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    convertView = LayoutInflater.from(context).inflate(
      R.layout.grid_item_image_layout, null); 

    ImageView imageView = (ImageView) convertView 
      .findViewById(R.id.grid_item_imageview); 
    final CheckBox checkBox = (CheckBox) convertView 
      .findViewById(R.id.grid_item_checkbox); 
    final Photo photo = photoList.get(position); 

    if (photo.isSelected()) { 
     checkBox.setChecked(true); 
    } else { 
     checkBox.setChecked(false); 
    } 
    imageView.setImageResource(Integer.parseInt(photo.getFileUrl())); 
    checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
      if (isChecked) { 
       photo.setSelected(true); 
      } else { 
       photo.setSelected(false); 
      } 

     } 
    }); 
    return convertView; 

} 

    } 

Ésta es mi adaptador.

Si ustedes know.Can u por favor me dicen ...

Gracias, Chaitanya

Respuesta

24

Creo que su ImageViews robando Focus, ya que son verificables. Por lo tanto, el clic del elemento no sucede porque sus ImageViews lo interceptan.

Agregar estos atributos a sus imageviews podría ayudar, pero probablemente podría dificultar sus comprobaciones.

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

Tener elementos seleccionables en una lista de lista es un poco doloroso. Pero creo que encontrarás temas relacionados sobre cómo hacerlo.

Aquí es 1 tutorial que parece adecuado, admito que no tuve lancé una mirada más cercana en él, pero es posible que desee:

http://windrealm.org/tutorials/android/listview-with-checkboxes-without-listactivity.php

+3

Gracias por lo que Konstantin..Thank much..It trabajó para me..Added estas herramientas de apoyo tanto para imageview y casilla entonces sólo se está trabajando . – Chaitu

+0

¡Me alegro de eso! :) – Ostkontentitan

+0

He agregado la vista de imagen y la casilla de verificación en un diseño lineal programáticamente. Así que estoy haciendo las 2 líneas anteriores a través del código Java. Pero, aún así, no puedo recibir ningún elemento de clic. – Namratha

1

la esperanza que esto puede ayudar a alguien, En gridview, si se agrega botones o establecer "android: clickable = true" en el elemento dentro de él, no se escuchará OnItemClickListener de gridview, en su lugar puede crear una imagen o una vista de texto con imagen y asegurarse de que no ha configurado clickable = "true". Ahora, OnItemClickListener escuchará TextView y esto funcionó para mí.