2016-03-28 139 views
1

我有一個ListViewCheckBoxEditText。我想要點擊Button獲取CheckBoxes的名稱和EditText的值。我怎樣才能做到這一點?如何讓按鈕點擊ListView項目?

我getView()方法:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.scrap_list_row_item, parent, false); 
     final EditText kg = (EditText) convertView.findViewById(R.id.editText1); 
     final CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox1); 
     final TextView txtKg = (TextView) convertView.findViewById(R.id.textView1); 
     final float scale = context.getResources().getDisplayMetrics().density; 
     cb.setPadding(cb.getPaddingLeft() + (int)(10.0f * scale + 0.5f), 
       cb.getPaddingTop(), 
       cb.getPaddingRight(), 
       cb.getPaddingBottom()); 
     //cb.setText(modelItems[position].getName()); 
     cb.setText(arrayScrapItems.get(position).getItemName()); 

     cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

       @Override 
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
        if(isChecked) 
        { 
         // Toast.makeText(context, "You checked " + arrayScrapItems.get(position).getItemName(), Toast.LENGTH_SHORT).show(); 
         cb.setButtonDrawable(R.drawable.checkbox_background_active); 
         kg.setBackgroundResource((R.drawable.kg_box)); 
         txtKg.setTextColor(Color.parseColor("#000000")); 
         kg.setFocusable(true); 
         kg.setEnabled(true); 
        } 
        else 
        { 
         //Toast.makeText(context, "You unchecked " + arrayScrapItems.get(position).getItemName(), Toast.LENGTH_SHORT).show(); 
         cb.setButtonDrawable(R.drawable.checkbox_background); 
         kg.setBackgroundResource((R.drawable.kg_box_inactive)); 
         txtKg.setTextColor(Color.parseColor("#D3D3D3")); 
         kg.setFocusable(false); 
         kg.setEnabled(false); 
        } 
       } 
      } 
     ); 

     return convertView; 
+0

有很多ListView複選框的教程 – Piyush

回答

0

由於ListView控件回收它的意見,你不能,在按鈕的情況下點擊通過所有列表項,看看他們進行檢查或沒有,因爲只有在列表中可以看到很多視圖。例如。如果列表中有1000行,其中20行可以同時顯示在屏幕上,那麼您的ListView只有20個視圖(即20個CheckBox和20個EditText),並且由您的ListAdapter實現來填充它們的正確數據1000行中的任何一行,具體取決於用戶滾動列表的距離。

因此,您將不得不跟蹤檢查的行以及它在某種離屏模式下的文本。

而且當您在模型中擁有所有這些信息時,您可以輕鬆訪問它,那麼會提示該按鈕被單擊。

因此,首先,如果convertView爲空,您將需要以只創建新視圖的方式更改代碼。如果它不爲空,則只需將其更新爲視圖的狀態即可,該狀態爲給定的position處的行狀態。此狀態應該來自您的屏幕外模型。

希望這個答案帶給你正確的軌道,無論如何你應該熟悉ListViews回收視圖的方式。

相關問題