Android网格视图选择图像滚动时自动选择图像

时间:2014-02-14 10:08:55

标签: android image gridview

我正在创建一个gridView,并且在我显示图像的要求是,如果用户单击图像,那么图像的边框应该出现并且正在发生但问题是当我单击图像并向下滚动其他图像时自动选择图像,当我在网格视图中刷新图像列表时,所选图像将被取消选中。

public class ImageAdapter extends BaseAdapter {

    Display display = getWindowManager().getDefaultDisplay();

    @Override
    public int getCount() {
        return images.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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

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

        final int Position = position;

        if (view == null) {
            view = getLayoutInflater().inflate(R.layout.item_grid_image,
                    parent, false);
            holder = new ViewHolder();
            assert view != null;
            holder.imageView = (ImageView) view.findViewById(R.id.image);
            holder.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

            holder.imageView
                    .setLayoutParams(new RelativeLayout.LayoutParams(
                            formulas.getWidth(200), formulas.getWidth(200)));

            holder.progressBar = (ProgressBar) view
                    .findViewById(R.id.progress);
            holder.progressBar
                    .setLayoutParams(new RelativeLayout.LayoutParams(
                            formulas.getWidth(200), formulas.getWidth(200)));

            view.setTag(R.id.image, holder.imageView);

            view.setTag(holder);

        } else {
            holder = (ViewHolder) view.getTag();
        }



        holder.imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                // Log.e("", "image :"
                // + images.get(position).getThumbNailUrl());

                // ImageView imageView = (ImageView) v;
                // int getPosition = (Integer) imageView.getTag();

                if (thumbnailsselection.get(Position)) {
                    holder.imageView
                            .setBackgroundResource(R.drawable.borderonclick);
                    thumbnailsselection.set(Position, false);

                } else {
                    holder.imageView
                            .setBackgroundResource(R.drawable.border);
                    thumbnailsselection.set(Position, true);
                }

            }
        });

        imageLoader.displayImage(images.get(position).getThumbNailUrl(),
                holder.imageView, options,
                new SimpleImageLoadingListener() {
                    @Override
                    public void onLoadingStarted(String imageUri, View view) {
                        holder.progressBar.setProgress(0);
                        holder.progressBar.setVisibility(View.VISIBLE);
                    }

                    @Override
                    public void onLoadingFailed(String imageUri, View view,
                            FailReason failReason) {
                        holder.progressBar.setVisibility(View.GONE);
                    }

                    @Override
                    public void onLoadingComplete(String imageUri,
                            View view, Bitmap loadedImage) {
                        holder.progressBar.setVisibility(View.GONE);
                    }
                }, new ImageLoadingProgressListener() {
                    @Override
                    public void onProgressUpdate(String imageUri,
                            View view, int current, int total) {
                        holder.progressBar.setProgress(Math.round(100.0f
                                * current / total));
                    }
                });
        // holder.checkbox.setChecked(thumbnailsselection.get(position));

        return view;
    }

    class ViewHolder {
        ImageView imageView;
        ProgressBar progressBar;

    }

}

thumbnailSelection是布尔arraylist,用于了解选择了哪个图像。 我正在设置适配器的网格视图是。

showingImages = new GridView(this);

    // showingImages.setColumnWidth(90);
    // showingImages.setBackgroundColor(Color.parseColor("#EAEAEA"));
    showingImages.setHorizontalSpacing(2);
    showingImages.setVerticalSpacing(2);
    showingImages.setNumColumns(4);
    showingImages.setGravity(Gravity.CENTER);
    // showingImages.setStretchMode(90);
    showingImages.setOnScrollListener(this);

3 个答案:

答案 0 :(得分:0)

也许最好在GridView上使用onClick而不是ImageView。然后你可以在gridview.onClick(adapter.itemSelected(int index)中调用你的适配器的公共函数。然后你可以做你想要的,你也可以在你的适配器中保留一个索引(int selectedIndex)并重置这个刷新到-1。在你的getView函数中,你可以检查位置是否= = selectedIndex并根据需要设置边框。 我认为ImageButton也可以工作(不确定)。

答案 1 :(得分:0)

当我点击图片并向下滚动时,其他一些图片会自动被选中


convertView中的GridView将被重复使用,如果点击上一项,则设置其背景,然后重复使用时,背景仍然是脏的。因此,请尝试在getView()代码中将背景设置为正常

答案 2 :(得分:0)

然而,我还没有检查你的代码。但您可以使用onitemlongclicklistener执行任务。 换句话说。

不要在网格中使用可点击的对象。那种情况下Android无法处理网格的点击事件。 而是使用某些东西来显示类似的用户界面视图处理该对象单击操作。

<强>假;将按钮放在网格中以执行一些单击操作。

<强>真;放置一个imageview而不是imagebutton并处理imageview的点击事件。

实际上,您只需要确保网格中的项目不可点击。 GridViews无法处理可点击的项目。例如按钮不起作用。此外,如果您使用LinearLayout或任何其他不可点击的项目制作项目,则必须确保未设置属性:clicable =“true”。