GridView项目不再可点击

时间:2014-02-02 00:10:56

标签: android gridview

我有一个gridView,它有一个自定义适配器:

package com.example.awesomefilebuilderwidget;

IMPORTS

public class GridViewAdapter extends BaseAdapter {
private Context Context;

// Keep all Images in array list
public ArrayList<Integer> drawables = new ArrayList<Integer>();

CheckBox mCheckBox=null;

// Constructor
public GridViewAdapter(Context c){
    Context = c;
    Log.d("GridViewAdapter", "Constructor is set");

    drawables.add(R.drawable.add_button);
    Log.d("GridViewAdapter", "add_button added");

    drawables.add(R.drawable.pattern1);
    Log.d("GridViewAdapter", "pattern1 added");

    drawables.add(R.drawable.pattern2);
    Log.d("GridViewAdapter", "pattern2 added");

    drawables.add(R.drawable.trashcan);
    Log.d("GridViewAdapter", "trashcan added");

    drawables.add(R.drawable.ic_launcher);
    Log.d("GridViewAdapter", "ic_launcher added");
}

public void setCheckBox(CheckBox checkbox){
    mCheckBox=checkbox;
}

@Override
// How many items are in the data set represented by this Adapter
public int getCount() {
    return drawables.size();
}

@Override
// Get the data item associated with the specified position in the
// data set
public Object getItem(int position) {
    return drawables.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Try to reuse the views
    ImageView view = (ImageView) convertView;
    boolean checked = (mCheckBox==null)?false:(((CheckBox)  mCheckBox).isChecked());
    // if convert view is null then create a new instance else reuse it
    if (view == null) {
        view = new ImageView(Context);
        Log.d("GridViewAdapter", "new imageView added");
        view.setId(R.id.iconImageView_id);
    }
    if(checked == true){
        isSdReadable();
        Log.i("GridViewAdapter", "checkbox is checked");
        /*FileInputStream in = null;
        try {
            in = Context.openFileInput("BitmapImage");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // Load back the image file to confirm it works
        Bitmap bitmap = BitmapFactory.decodeStream(in);
        view.setImageBitmap(bitmap);
        try {
            in.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }*/
    } else {
        Log.i("GridView", "Icons not for use/checkbox not checked");
    }

    view.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            ImageView folder = new ImageView(Context);
            folder.setImageResource(R.drawable.ic_launcher);
        }

    });

    view.setImageResource(drawables.get(position));
    view.setScaleType(ImageView.ScaleType.CENTER_CROP);
    view.setLayoutParams(new android.widget.GridView.LayoutParams(70, 70));
    view.setTag(String.valueOf(position));
    return view;
}

}

但每当我运行此代码时,listView项目都是无法点击的,我无法弄清楚原因。我试图这样做,以便当点击gridView中的项目时,它会创建一个名为“folder”的新imageView,显示ic_launcher。请帮忙!

1 个答案:

答案 0 :(得分:0)

您似乎在列表项中添加了可点击的视图。这将禁用列表项单击事件的默认行为。

您可以通过在所需的列表项目视图上设置android:clickable="true"来规避此操作,但请记住,这不能为D-pad设备(如电视)提供解决方案,因为视图也需要能够获得焦点。

更完整的解决方案是确保列表项也能获得焦点。同样,由于禁用了此操作的默认行为,您需要为列表项的背景提供焦点和触摸状态。