2012-04-07 107 views
0

我想创建一个带CheckBox的ListView ... Th ListView应该允许用户选择一个项目或打开该项目来选择其中的其他选择。换句话说,ListView应该能够区分复选框的点击和项目本身的点击。Android ListView与CheckBox可以区分点击

我试图使用android.R.layout.simple_list_item_multiple_choice实现它,但是这个允许我只勾选复选框,即使我在复选框外(在该项上)单击。

任何人都可以提供帮助吗?
这里是我的代码,

import java.util.ArrayList; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class ListViewActivity extends Activity implements OnItemClickListener { 

ListView directoryList; 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final ArrayList<String> contacts = new ArrayList<String>(); 
    contacts.add("zaid"); 
    contacts.add("hazem"); 
    contacts.add("Oubai"); 


    directoryList= (ListView) findViewById(R.id.directoryList); 


    final ArrayAdapter<String> arrayAdapter; 
    arrayAdapter = new ArrayAdapter<String>(this, 
            android.R.layout.simple_list_item_multiple_choice, 
            contacts); 


    directoryList.setAdapter(arrayAdapter); 
    directoryList.setOnItemClickListener(this); 
    directoryList.setClickable(true); 



} 

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 




} 

}

+0

我也有类似的问题,我在适配器本身解决IY与OnClickListener。不是最干净的方式,但它的工作 – znat 2012-04-07 15:01:06

+0

好吧,你能告诉我你是如何在代码中做到这一点?感谢 – 2012-04-07 15:04:34

+0

shubhayu的答案提供了一个更好的例子 – znat 2012-04-07 15:19:26

回答

2

你需要一个定制的阵列适配器。在您的getView()中,获取您的复选框并设置OnCheckedChangeListener()

以下是有关如何制作自己的自定义适配器的教程。该示例具有可点击的文本框,但您可以将其更改为用于复选框。

http://www.shubhayu.com/android/listview-with-arrayadapter-and-customized-items

+0

谢谢....这里有一个更好的教程 http://android-er.blogspot.com/2010/06/using-convertview-in-getview-to-make.html – 2012-04-07 18:56:07

+0

这是不错,但并没有说明如何在适配器中添加一个监听器。 :) – Shubhayu 2012-04-08 04:27:05

+0

你的教程对我来说非常有用,但它并没有显示MyCustomAdapter类正在被覆盖。它突然超越了一种让我疯狂的方法......无论如何。 – 2012-04-08 10:50:24