2014-02-14 63 views
0

我正在创建一个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); 

回答

0

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

0

当我点击图像和向下滚动其他一些图像自动选择


convertViewGridView将被重用,如果以前的产品点击后,它的背景被设置,然后当它被重新使用时,背景保持脏。因此,请尝试在您的getView()代码中将背景设置为正常

0

但是,我没有检查您的代码。但是你可以使用onitemlongclicklistener来执行你的任务。 以其他方式。

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

false;将按钮放在网格中以执行一些点击操作。

true;放置一个imageview而不是imagebutton并处理imageview的点击事件。

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