2013-01-03 33 views
2

有沒有辦法檢查gridview中的元素?Android:如何設置在gridview中檢查項目?

我找不到toggle()方法或setChecked(true),我gridview具有延伸BaseAdapter適配器,我想改變背景顏色當元件被檢查(不只是選擇)。

我會像ListView:GridView.setChoicheMode(MULTICHOICE)然後item.toggle()item.setChecked(true)並將檢查狀態存儲到視圖中。

編輯:

我添加了一個空CheckedTextView,存儲檢查狀態。 但是,有沒有更乾淨的方法來做到這一點?

編輯2 現在我可以做我想要的但當我向下滾動gridview然後向上滾動選擇的項目不再被選中。

boolean checked = layout.getCheckedItemPositions().get(position); 
       if(checked){ 
        check.toggle(); 
        view.setBackgroundColor(getResources().getColor(android.R.color.transparent)); 
       } 
       else{ 
        check.toggle(); 
        view.setBackgroundColor(getResources().getColor(android.R.color.holo_green_light)); 
       } 

其中layout是gridview的佈局。 我想我要修改我的適配器的getView方法,但是這個代碼不工作:

CheckedTextView check = (CheckedTextView) layout.findViewById(R.id.txv_grid_check); 
     boolean checked = check.isChecked(); 
     if(checked){ 
      layout.setBackgroundColor(c.getResources().getColor(android.R.color.holo_green_light)); 
     } 
     else{ 
      layout.setBackgroundColor(c.getResources().getColor(android.R.color.transparent)); 
     } 

編輯3

我覺得沒有辦法做我想做的(存儲狀態在CheckedTextView元素中),因爲視圖在滾動列表或gridview時被銷燬並重新創建。所以我需要處理物品的狀態到適配器中。我用int的HashSet來存儲檢查項目的位置,並且我從GridView中處理了這個列表的一些公共方法。 在gridview活動中,有可能獲得適配器,然後執行myadapter.check(int position)或取消選中(int position)。 然後在適配器中,進入getView()方法,我們需要檢查一個位置是否在列表中並設置適當的背景顏色。

+0

使用選擇器xmls作爲背景以顯示選定的按下狀態。 –

+0

在您的問題中添加更多說明。 – DynamicMind

+0

@DynamicMind喜歡什麼? – gdantimi

回答

2

我希望這個answer會幫助你。在這個示例中,在網格項目佈局中有TextView,您可以將其更改爲CheckedTextView或複選框。在getView()中檢查狀態並設置網格項目的背景顏色。

+0

我不會實現這一點,我會以標準的方式來做到這一點,如列表。 – gdantimi

+0

答案是黑客。我已經添加了一個答案,在那裏我描述了更多的標準方式如何做到這一點:http://stackoverflow.com/a/17389893/1200812 – Strix

0

使用此代碼。這對我來說很有用。

public View getView(final int position, View convertView, ViewGroup parent) { 
      View vi=convertView; 
      if(convertView==null) 
       vi = inflater.inflate(R.layout.list_row, null); 

      final MyDat mydat;// = new MyDat(); 
      if (position >= MyViewedMeItemList.size()) { 
       mydat = new MyDat(); 

      } 
      else 
      { 
       mydat = MyViewedMeItemList.get(position); 
      } 

      mydat.title = (TextView)vi.findViewById(R.id.title); // title 
      mydat.artist = (TextView)vi.findViewById(R.id.artist); // artist name 
      mydat.duration = (TextView)vi.findViewById(R.id.duration); // duration 
      mydat.thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image 
      mydat.cccheckbomx=(CheckBox)vi.findViewById(R.id.rajesh);   
      mydat.cccheckbomx.setVisibility(View.VISIBLE); 


      if (mydat.myCheckStatus) { 
       // Toast.makeText(MessageInboxDelete.this, "true --->" + 
       // position, 
       // Toast.LENGTH_SHORT).show(); 
       mydat.cccheckbomx.setChecked(true); 
      } else { 
       /* 
       * Toast.makeText(MessageInboxDelete.this, "false --->" + 
       * position, Toast.LENGTH_SHORT).show(); 
       */ 
       mydat.cccheckbomx.setChecked(false); 
      } 

      mydat.cccheckbomx.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View paramView) { 
        // TODO Auto-generated method stub 
        //Toast.makeText(context, "Rajesh", Toast.LENGTH_SHORT).show(); 




        int gridchild; 
        gridchild = list.getChildCount(); 
        for (int j = 0; j < gridchild; j++) { 
         // DrawArea_Steptwo.gridview.getChildAt(j); 

        // Toast.makeText(context, "Rajesh", Toast.LENGTH_SHORT).show(); 
         RelativeLayout gridchildlayout = (RelativeLayout) list 
           .getChildAt(j); 

         CheckBox tempRadioToggle = (CheckBox) gridchildlayout 
           .findViewById(R.id.rajesh); 

         tempRadioToggle.setChecked(false);      

         MyDat tempViewholder = MyViewedMeItemList.get(j); 
         tempViewholder.myCheckStatus = false; 
        } 


        for(int j = 0; j < MyViewedMeItemList.size(); j++) { 
         MyDat tempViewholder = MyViewedMeItemList.get(j); 
         tempViewholder.myCheckStatus = false; 
        } 
        CheckBox tempRadioToggle = (CheckBox) paramView.findViewById(R.id.rajesh);  
        tempRadioToggle.setChecked(true); 

        MyDat tempViewholder = MyViewedMeItemList.get(position); 

          if (tempViewholder.myCheckStatus == false) { 
           tempViewholder.myCheckStatus = true; 
           // tempViewholder.deleteRadioButton.setChecked(true); 


          } else { 
           tempViewholder.myCheckStatus = false; 
           // tempViewholder.deleteRadioButton.setChecked(false); 

          } 


       } 
      }); 
      HashMap<String, String> song = new HashMap<String, String>(); 
      song = data.get(position); 

      // Setting all values in listview 
      mydat.title.setText(song.get(CustomizedListView.KEY_TITLE)); 
      mydat.artist.setText(song.get(CustomizedListView.KEY_ARTIST)); 
      mydat.duration.setText(song.get(CustomizedListView.KEY_DURATION)); 
      imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), mydat.thumb_image); 

      if (MyViewedMeItemList.size() <= position) { 
       MyViewedMeItemList.add(mydat); 
      } 



      return vi; 
     } 

    public class MyDat{ 

      Boolean myCheckStatus=false; 
      TextView title ; 
      TextView artist; 
      TextView duration; 
      ImageView thumb_image; 
      CheckBox cccheckbomx; 

     } 
    } 
+0

你可以使用GridView來檢查你 - 不需要onCLickListener,你沒有要自己存儲狀態,您不必自己更新視覺外觀。請參閱:http://stackoverflow.com/a/17389893/1200812 – Strix

相關問題