2013-09-26 22 views
6

你好,我創建了一個列表視圖,在它的複選框... ,但我不知道如何讓被選中的複選框文字..這裏是activity_main.xml中的代碼Android開文本檢查ListView中的複選框

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="top" 
    android:orientation="vertical" 
    tools:context=".MygamesActivity" > 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_marginTop="20dp" /> 

</LinearLayout> 

具有複選框在ListView main.list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckBox 
     android:id="@+id/checkBox1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="CheckBox" 
     /> 
</LinearLayout> 

顯示,這是一個擴展arrayadapter

類另一個佈局

,這是我的MainActivity類別

package com.wasiff.listview; 

import android.app.ListActivity; 
import android.content.Context; 
import android.content.res.Resources; 
import android.content.res.TypedArray; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.Button; 
import android.widget.ListAdapter; 
import android.widget.ListView; 

public class MainActivity extends ListActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Context ctx = getApplicationContext(); 
     Resources res = ctx.getResources(); 

     String[] options = res.getStringArray(R.array.countrynames); 

     setListAdapter((ListAdapter) new CheckboxAdapter(ctx,R.layout.main_list_item,options)); 

    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

,最後我把所有的國家保存在一個文件countries.xml價值觀夾

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="countrynames" translatable="false"> 
     <item>Bhutan</item> 
     <item>Colombia</item> 
     <item>India</item> 
     <item>Pakistan</item> 
     <item>Australia</item> 
     <item>Srilanka</item> 
     <item>England</item> 
    </string-array> 
</resources> 

它顯示在ListView複選框現在我想要的是讓它們在點擊一個按鈕(測試)舉杯檢查並顯示覆選框的文字我也跟着在Android菜譜本教程由奧萊利但我仍然不知道如何設置監聽

回答

18

裏面添加CheckboxAdapter.java

ArrayList<String> selectedStrings = new ArrayList<String>(); 

內。然後getView方法

tv.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
        selectedStrings.add(tv.getText().toString()); 
       }else{ 
        selectedStrings.remove(tv.getText().toString()); 
       } 

      } 
     }); 

寫一個getter將返回selectedStrings

ArrayList<String> getSelectedString(){ 
    return selectedStrings; 
} 
+1

Thankss其工作:) –

+0

問題的解決方案是,它不保持 –

+0

內onCheckedChanged使用,而不是tv.getText – temirbek

1

在方法可以是一個自己的對象傳遞到您的Arrayadapter:

class ArrayItem{ 
    private String text; 
    private boolean checked; 
    ... (getter/setter) 
} 

,只是得到了使用陣列從Arrayadapter回頭去讀它。

Arrayadaper...{ 

    public ArrayList<ArrayItem> getList(){ 
     return this.arrayList; 
    } 

    public View getView(int position,View convertView,ViewGroup parent){ 
     ArrayItem item = this.arrayList.get(position) 
     convertView = mInflater.inflate(mViewResourceId, null); 

     CheckBox tv = (CheckBox)convertView.findViewById(R.id.checkBox1); 
     tv.setCheckChangeListener... //item.setChecked(true:false) 
     tv.setText(mStrings[position]); 

     return convertView; 
    } 
} 


} 

可以遍歷列表,只是在那裏操縱檢查==真

希望這有助於項目。

13

可能這將幫助你:

CheckBox cb; 
    ListView mainListView = getListView(); 
    for (int x = 0; x<mainListView.getChildCount();x++){ 
     cb = (CheckBox)mainListView.getChildAt(x).findViewById(R.id.myCheckBox); 
     if(cb.isChecked()){ 
      doSomething(); 
     } 
    } 
+0

我真的很喜歡這一個! –

+0

@Saif Hamed它對我很有用... –

+0

這隻適用於列表中的可見物品。 – c0m4

0
SparseBooleanArray checked = listView1.getCheckedItemPositions(); 
       ArrayList<String> selectedItems = new ArrayList<String>(); 

       for (int i = 0; i < len; i++) { 
        if (checked.get(i)) 
         selectedItems.add((String) adapter.getItem(i)); 
       } 
       String[] outputStrArr = new String[selectedItems.size()]; 

       for (int i = 0; i < selectedItems.size(); i++) { 
        outputStrArr[i] = selectedItems.get(i); 
       } 
相關問題