【问题标题】:Android Gallery Grid On Selected not workingAndroid Gallery Grid On Selected 不工作
【发布时间】:2014-06-22 21:53:31
【问题描述】:

我已经在这里找到了一个代码,但现在我遇到了另一个问题。 正如您在主要活动中看到的那样,gridview 中显示的图像有一个 onItemClick 事件,但问题是单击图片时发生了注意事项。

MAIN_ACTIVITY

package com.javatechig.gridview;

import java.io.File;
import java.util.ArrayList;

import android.app.Activity;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.Toast;

/**
 * 
 * @author javatechig {@link http://javatechig.com}
 * 
 */
public class MainActivity extends Activity {
    private GridView gridView;
    private GridViewAdapter customGridAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_delta);

        gridView = (GridView) findViewById(R.id.gridView);
        customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, getData());
        gridView.setColumnWidth(400);
        gridView.setPadding(8, 8, 8, 8);
        gridView.setAdapter(customGridAdapter);

        gridView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {
                Toast.makeText(MainActivity.this, position + "#Selected",
                        Toast.LENGTH_SHORT).show();
                Log.w("click", "click");
            }

        }); 



    }





    private ArrayList<ImageItem> getData() {
        final ArrayList imageItems = new ArrayList();

        String stringpath = Environment.getExternalStorageDirectory().toString()+"/Pictures/Hello Camera";
        File path=new File(stringpath);
        File[] imageFiles = path.listFiles();
        for (int i = 0; i < imageFiles.length; i++) {
          //  Bitmap bitmap = BitmapFactory.decodeFile(imageFiles[i].getAbsolutePath());
          //  imageItems.add(new ImageItem(bitmap, "Image#" + i));

            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 4;

            Bitmap bitmap = BitmapFactory.decodeFile(imageFiles[i].getAbsolutePath(),options);
            imageItems.add(new ImageItem(bitmap, "Image#" + i));

        }

        return imageItems;}

}

GridViewAdapter

package com.javatechig.gridview;

import java.util.ArrayList;

import android.app.Activity;
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.ImageView;
import android.widget.TextView;

/**
 * 
 * @author javatechig {@link http://javatechig.com}
 * 
 */
public class GridViewAdapter extends ArrayAdapter<ImageItem> {
    private Context context;
    private int layoutResourceId;
    private ArrayList<ImageItem> data = new ArrayList<ImageItem>();

    public GridViewAdapter(Context context, int layoutResourceId,
            ArrayList<ImageItem> data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ViewHolder holder = null;

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new ViewHolder();
            holder.imageTitle = (TextView) row.findViewById(R.id.text);
            holder.image = (ImageView) row.findViewById(R.id.image);
            holder.checkbox = (CheckBox) row.findViewById(R.id.checkBox1);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        ImageItem item = data.get(position);
        holder.imageTitle.setText(item.getTitle());
        holder.image.setImageBitmap(item.getImage());
        holder.checkbox.setChecked(false);

        return row;
    }

    static class ViewHolder {
        TextView imageTitle;
        ImageView image;
        CheckBox checkbox;
    }
}

图像项

package com.javatechig.gridview;

import android.graphics.Bitmap;

/**
 * @author javatechig {@link http://javatechig.com}
 * 
 */
public class ImageItem {
    private Bitmap image;
    private String title;

    public ImageItem(Bitmap image, String title) {
        super();
        this.image = image;
        this.title = title;
    }

    public Bitmap getImage() {
        return image;
    }

    public void setImage(Bitmap image) {
        this.image = image;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

**

  • XML

**

行网格

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:orientation="vertical"
    android:padding="5dp" 
    android:clickable="true"
    android:background="@drawable/grid_color_selector"
    android:descendantFocusability="blocksDescendants">

    <ImageView
        android:id="@+id/image"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:scaleType="center" >

    </ImageView>

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="CheckBox"
         />

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:gravity="center"
        android:textSize="12sp"
         >
    </TextView>

</LinearLayout>

activity_main_delta

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f0f0f0"
    tools:context=".MainActivity"
    android:descendantFocusability="blocksDescendants" >

    <GridView
        android:id="@+id/gridView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:clickable="true"
        android:columnWidth="100dp"
        android:drawSelectorOnTop="true"
        android:gravity="center"
        android:numColumns="auto_fit"
        android:stretchMode="columnWidth"
        android:verticalSpacing="5dp" >

    </GridView>

</RelativeLayout>

我该如何解决?

谢谢!

【问题讨论】:

  • 我在此处或给定链接中都看不到任何 onItemClick-EventListener。
  • @Burn 是的,对不起,我忘了添加那部分。我编辑了这个问题。主要来源在那里,添加适配器和 xml 文件

标签: android android-gridview android-gallery android-bitmap


【解决方案1】:

请从您的 rowgrid LinearLayout 中移除 android:clickable 属性。 这是在 GridView 获取事件之前捕获事件。 因此,只需将所有 onClick 和 onLongClick 绑定到您的 GridView 的 onItemClick 和 onItemLongClick 侦听器。 祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    相关资源
    最近更新 更多