2011-12-27 108 views
1

我有一個問題,我有一個自定義網格視圖,其中兩個圖像一個是背景圖像,第二個是複選標記圖像,當我點擊一個項目網格視圖複選標記顯示哪個圖像選擇圖像,但是當我們想要選擇第二個網格視圖項時,它也在同一圖像上顯示覆選標記,如下圖所示,但我希望只能選擇一個圖像立即表示如果選擇了其他複選標記將被隱藏。請給我建議正確的結果。我怎麼能一次顯示在網格視圖中的圖像選擇

enter image description here

代碼: GridAdapter:

public class GridAdapter extends BaseAdapter { 


    private Activity activity; 
    private LayoutInflater inflater = null; 
    ArrayList<Integer> items = new ArrayList<Integer>(); 

    int checked=0; 
    public GridAdapter(Activity a, ArrayList<Integer> items) { 
     activity = a; 
     this.items = items; 
     inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    public int getCount() { 
     return items.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

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

    public View getView(final int position, View convertView, ViewGroup parent) { 
     // View v = convertView; 
      ImageView img; 
     final ImageView img_select; 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.grid_items, null); 
      img_select = (ImageView)convertView.findViewById(R.id.check_image); 
      img_select.setTag(position); 
      img = (ImageView)convertView.findViewById(R.id.img_GridItem); 
      img.setTag(position); 
      //img_select = (ImageView)v.findViewById(R.id.itemCheckBox); 

      img.setBackgroundResource(items.get(position)); 


      img.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       Log.i("Clicked", "Tag###########"); 
       //img_select.setVisibility(View.INVISIBLE); 
       img_select.setFocusable(true); 
       img_select.setEnabled(true); 
       if(checked==0) 
       { 

       img_select.setBackgroundResource(R.drawable.selectimage); 
       GreetingTextContainer greet = GreetingTextContainer.getSingletonObject(); 
       greet.setPosition(position); 
       checked =1; 
       } 
       else 
       { 
        img_select.setBackgroundResource(0); 
        checked=0; 
       } 
      } 
     }); 
     } 



     return convertView; 
    } 
} 
+0

可能重複的[如何在android中的網格視圖中顯示圖像選擇](http://stackoverflow.com/questions/8641403/how-to-show-a-selection-of-image-in-grid -view-in-android) – 2011-12-27 10:25:28

+1

請不要*在同一主題上發表重複的問題。當然,這只是一個小小的修改,但它很小,所以它不能保證一個全新的問題。我已經將原作關閉了,因爲*這*實際上是正在尋找的預期行爲。但是,堆棧溢出不是您的衆包的增量開發團隊,請不要將它視爲重複且重複的編輯。 – casperOne 2011-12-27 14:23:13

+0

'GreetingTextContainer'這個類是做什麼的。你可以發佈代碼嗎? – Prateek 2012-08-09 10:12:57

回答

1

那麼,有一個簡單的方法來做到這一點。您可以保留之前選擇的項目的參考。例如您在類級別創建一個變量,在此使用適配器。然後,在您的onClick偵聽器中,取消選擇該圖像並使用當前視圖(當前圖像)設置該變量。例如

ImageView iv_selected = null; 

// .......... 

@Override 
public void onClick(View view) 
{ 
    Log.i("Clicked", "Tag###########"); 
    if(iv_selected != null) 
    { 
      // unselect the image here 
    } 
    // set this variable again e.g. 
    iv_selected = (ImageView)view; 


    //img_select.setVisibility(View.INVISIBLE); 
    img_select.setFocusable(true); 
    img_select.setEnabled(true); 
    if(checked==0) 
    { 

      img_select.setBackgroundResource(R.drawable.selectimage); 
      GreetingTextContainer greet = GreetingTextContainer.getSingletonObject(); 
      greet.setPosition(position); 
      checked =1; 
    } 
    else 
    { 
      img_select.setBackgroundResource(0); 
      checked=0; 
    } 
} 

在此,您將始終具有所選單個ImageView的引用。所以,當你選擇別的東西時,你可以取消選中它。我希望你明白了。

1

在您的代碼中,您忘記取消選擇當前所選圖像以外的所有圖像。只有你完成了爲所選圖像設置背景。你需要爲他人設定unseleted圖像藏漢

* 第1步 *初始化選定位置-1 GridAdapter類

int checked=0; 
int selectedPosition = -1; 

* 步驟2 *重寫你的onclick方法如下

@Override 
    public void onClick(View v) { 
     Log.i("Clicked", "Tag###########"); 
     //img_select.setVisibility(View.INVISIBLE); 
     img_select.setFocusable(true); 
     img_select.setEnabled(true); 


     if(checked==0) 
     { 
      selectedPosition = position; 

     } 
     for(int i = 0; i<items.size(); i++){ 
      if(i == selectedPosition){ 
       img_select.setBackgroundResource(R.drawable.selectimage); 
       GreetingTextContainer greet = GreetingTextContainer.getSingletonObject(); 
       greet.setPosition(position); 
       checked =1; 
      }else{ 
       img_select.setBackgroundResource(0); 
       checked=0; 

      } 
     } 
    } 
0

執行下列操作在您的overrided方法onItemClick

gridView.setOnItemClickListener(new OnItemClickListener() { 
public void onItemClick(AdapterView<?> p, View view, int position, 
         long id) { 
        pos=position; 
        for(int i=0;i<ur_imageList.size();i++){ 
         if(i==position){ 
          //do nothing 
         } 
         else{ 
          ur_imageList.get(i).isSelected=false; 
         } 
        } 
        if(ur_imageList.get(position).isSelected){//To deselect If selected 
         ur_imageList.get(position).isSelected=false; 
        } 
        else{ 
         ur_imageList.get(position).isSelected=true; 
        } 
        gridview.invalidateViews(); 
       } 
      });