GridView.setOnItemClickListener не работает
Я страдаю от одной проблемы с 2 дня. У меня есть вид сетки в том, что мне нужно отобразить изображения. Когда я нажимаю на элемент сетки, он должен перейти к следующему действию. Я могу отображать изображения в виде сетки, но дело в том, когда Я нажимаю на этот элемент, он не отвечает..(OnItemClickListener не работает). Я не смог отследить мою проблему, где я сделал неправильно.
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;
}
}
Это мой адаптер.
Если вы, ребята, знаете. Можете ли вы сказать мне...
Спасибо, Чайтанья
3 ответа
Я думаю, что ваши ImageViews крадут Фокус, потому что их можно проверить. Таким образом, щелчок элемента не происходит, потому что ваши ImageViews перехватывают его.
Добавление этих атрибутов в ваши просмотры изображений может помочь, но, вероятно, может затруднить ваши проверки.
android:focusable="false"
android:focusableInTouchMode="false"
Наличие проверяемых элементов в просмотре списка - это немного больно. Но я думаю, вы найдете соответствующие темы, как это сделать.
Вот 1 урок, который кажется подходящим, я признаю, что не бросил на него внимательный взгляд, но вы можете захотеть:
http://windrealm.org/tutorials/android/listview-with-checkboxes-without-listactivity.php
Также убедитесь, что ваш адаптер возвращает true для isEnabled
@Override
public boolean isEnabled(int i) {
return true;
}
http://developer.android.com/reference/android/widget/BaseAdapter.html
isEnabled(int position) Возвращает true, если элемент в указанной позиции не является разделителем.
В противном случае событие клика не будет выброшено для вашего элемента.
Надеюсь, что это может кому-то помочь. В gridview, если вы добавите кнопки или установите "android:clickable=true" в элементе внутри него, OnItemClickListener gridview не будет прослушиваться, вместо этого вы можете создать Image или TextView с изображением и посмотреть, что вы не установить clickable="true". Теперь OnItemClickListener будет прослушивать TextView, и это сработало для меня.