6

私は2日以来1つの問題に苦しんでいます.私は画像を表示する必要があるという点でグリッドビューを持っています.グリッドアイテムをクリックすると、次のアクティビティに移動する必要があります.グリッドビューで画像を表示できますが、問題はいつですか?応答していないアイテムをクリックしました..(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;

}

     } 

これは私のアダプターです。

ご存知の方、教えてください...

ありがとう、チャイタンヤ

4

3 に答える 3

26

ImageViews は Checkable であるため、Focus を盗んでいると思います。したがって、ImageViewsがインターセプトするため、アイテムのクリックは発生しません。

これらの属性をイメージビューに追加すると役立つかもしれませんが、おそらくチェックに問題が生じる可能性があります。

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

リストビューにチェック可能な項目があるのは少し面倒です。しかし、それを行う方法に関する関連トピックが見つかると思います。

ここに適切と思われるチュートリアルが1つあります。詳しく調べていないことは認めますが、次のことをお勧めします。

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

于 2012-08-13T09:32:55.610 に答える
2

また、アダプターが isEnabled に対して true を返すことを確認してください

@Override
     public boolean isEnabled(int i) {
     return true;
}

http://developer.android.com/reference/android/widget/BaseAdapter.html#isEnabled(int)

isEnabled(int position) 指定された位置にある項目がセパレーターでない場合に true を返します。

それ以外の場合、クリックイベントはアイテムに対してスローされません

于 2016-01-31T19:44:30.553 に答える
1

これが誰かの役に立てば幸いです。グリッドビューで、ボタンを追加するか、その中の要素に「android:clickable=true」を設定すると、グリッドビューの OnItemClickListener はリッスンされません。代わりに、イメージを使用して Image または TextView を作成し、それを確認できます。 clickable="true" を設定していません。これで、OnItemClickListener が TextView をリッスンし、これでうまくいきました。

于 2014-07-15T11:41:37.927 に答える