2014-02-14 60 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」。