2012-04-07 66 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