2011-04-05 137 views
2

我必须做ListViewCheckBoxes然后显示选中和未选中的项目,当用户按下按钮。问题是我不知道如何做到这一点,我管理,以显示与CheckBox与此代码ListView带有复选框的Android ListView:如何捕获选中的项目?

package guestCheckBox.com; 

import java.net.URL; 
import java.util.ArrayList; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 

public class GuestCheckBox extends Activity { 
    private ListView lView;    
    ArrayList<String> guest= new ArrayList <String>(); 

    @Override 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 
    lView = (ListView) findViewById(R.id.ListView01); 

    try{ 

     URL url = new URL(
     "http://tanjungrhu.jigsy.com/files/documents/Check.xml"); 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document doc = db.parse(new InputSource(url.openStream())); 
     doc.getDocumentElement().normalize(); 

     NodeList words = doc.getElementsByTagName("Guest"); 

     for(int i=0;i<words.getLength();i++){ 
      Node node = words.item(i); 

      Element fstElmnt = (Element) node; 
      NodeList NameList = fstElmnt.getElementsByTagName("Name"); 
      Element NameElement = (Element) NameList.item(0); 
      NameList = NameElement.getChildNodes(); 
      guest.add((((Node) NameList.item(0)).getNodeValue())); 
     } 

} 
catch (Throwable t){ 
    Toast.makeText(this, "Exeption:" + t.toString(), 2000).show(); 
} 

//Set option as Multiple Choice. So that user can able to select more the one option from list 
    lView.setAdapter(new ArrayAdapter<String>(this, 
    android.R.layout.simple_list_item_multiple_choice, guest)); 
    lView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
    } 
} 

这里我main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

<ListView 
    android:id="@+id/ListView01" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
</ListView> 

</LinearLayout> 

会有人告诉我如何我可以做一个按钮吗?当用户按下按钮时,我将如何显示选中和未选中的项目?

+0

你可以简单地得到由下列[链接]选中的项目[1] [1]:http://stackoverflow.com/questions/1362602/multiple-item-in-listview/7966789#7966789 – 2011-11-01 13:02:37

回答

0

我没有完全理解的问题是什么,但我可以为您提供的ListView的一个有用的扩展,它可以帮助你用字符串数据(集\得到检查的值)操作:

public class MultipleChoiceListView extends ListView { 

public MultipleChoiceListView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

public MultipleChoiceListView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public MultipleChoiceListView(Context context) { 
    super(context); 
} 

@Override 
public void setAdapter(ListAdapter adapter) { 
    throw new RuntimeException(
     "This component doesn't support custom adapter. Use setData method to supply some data to show."); 
} 

/** 
* Sets the data that should be displayed for choosing 
* 
* @param data List<String> 
*/ 
public void setData(List<String> data) { 
    super.setAdapter(new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_multiple_choice, data)); 
    super.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
} 

/** 
* Sets the data that should be choosen by default 
* 
* @param checkedData List<String> 
*/ 
public void setCheckedData(List<String> checkedData) { 
    for (int index = 0; index < getCount(); index++) { 
     if (checkedData.contains(getItemAtPosition(index))) { 
      setItemChecked(index, true); 
     } 
    } 
} 

/** 
* Returns checked by the user data passed in {@link #setData(List)} 
* 
* @return List<String> 
*/ 
public List<String> getCheckedData() { 
    SparseBooleanArray checked = getCheckedItemPositions(); 
    List<String> checkedResult = new ArrayList<String>(); 

    for (int i = 0; i < checked.size(); i++) { 
     if (checked.valueAt(i)) { 
      checkedResult.add(getAdapter().getItem(checked.keyAt(i)).toString()); 
     } 
    } 
    return checkedResult; 
} 

}

使用

例子:

private void initListMultiple() { 
    String[] data = new String[] {"first", "second", "third", "forth"}; 
    String[] checkedData = new String[] {"second", "forth"}; 

    multipleChoiceListView.setData(Arrays.asList(data)); 
    multipleChoiceListView.setCheckedData(Arrays.asList(checkedData)); 
} 

private void onTestListButtonClicked(View view) { 
    listResultTextView.setText(Arrays.toString(listView.getCheckedData().toArray())); 
} 
+0

其实,我试图把一些代码与按钮,将列出所有的项目,我当我按下它时,在列表视图中检查,但它没有工作..一路上,非常感谢你。我会研究这:) – winwizardy 2011-04-08 07:21:03

相关问题