2012-08-13 75 views
6

我一直在遭受一个问题,因为2天。我有一个网格视图,因为我需要显示图像。当我点击网格物品时,它必须去下一个activity.I能够在GridView中显示图像,但事情是当我点击该项目没有响应..(OnItemClickListener不工作)。我无法追查我的问题,我做错了。GridView.setOnItemClickListener无法正常工作

  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"); 

} 

     } 

这是我的片段..

  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; 

} 

    } 

这是我的适配器。

如果你们know.Canü请告诉我...

感谢, 切塔尼亚

回答

24

我觉得你ImageViews偷焦点,因为他们是勾选的。所以项目点击不会发生,因为你的ImageViews拦截它。

将这些属性添加到您的图像查看可能会有所帮助,但可能会麻烦您的检查。

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

让列表视图中的可检查的项目有点痛苦。但我想你会找到相关的主题如何去做。

这里是1个教程,似乎合适的,我承认我没有扔仔细一看就可以了,但是你可能想:

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

+3

感谢Konstantin..Thank你这么much..It工作了me..Added这些道具都imageview的并且复选框,然后仅是工作。 – Chaitu 2012-08-13 10:15:17

+0

我很高兴! :) – Ostkontentitan 2012-08-13 10:29:48

+0

我已经以编程方式在线性布局中添加了图像视图和复选框。所以我通过java代码做了以上两行。但是,我仍然无法收到任何点击项目。 – Namratha 2013-02-05 09:33:30

1

希望这可以帮助别人, 在GridView中,如果添加按钮或在其中的元素中设置“android:clickable = true”,gridview的OnItemClickListener将不会被监听,您可以使用图像创建一个Image或TextView,并确定您没有设置clickable =“true”。现在,OnItemClickListener将会听取TextView,这对我很有用。