2013-05-02 60 views
0

我有我的適配器類getView方法如下:如何使用listview和複選框?

public View getView(int position, View convertView, ViewGroup parent) { 
View view = null; 
if (convertView == null) { 
    LayoutInflater inflator = context.getLayoutInflater(); 
    view = inflator.inflate(R.layout.userlist, null); 
    final ViewHolder viewHolder = new ViewHolder(); 
    viewHolder.text2 = (TextView) view.findViewById(R.id.stuname); 
    viewHolder.text = (TextView) view.findViewById(R.id.rollno); 
    viewHolder.checkbox = (CheckBox) view.findViewById(R.id.cb); 
    viewHolder.checkbox 
     .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
      boolean isChecked) { 
      Model element = (Model) viewHolder.checkbox 
       .getTag(); 
      element.setSelected(buttonView.isChecked()); 
      // Toast.makeText(getContext(), "Checked", 
        // Toast.LENGTH_SHORT).show(); 


     } 
     }); 
    view.setTag(viewHolder); 
    viewHolder.checkbox.setTag(list.get(position)); 
} else { 
    view = convertView; 
    ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position)); 
} 
ViewHolder holder = (ViewHolder) view.getTag(); 
holder.text.setText(list.get(position).getName()); 
holder.text2.setText(list.get(position).getRoll()); 
holder.checkbox.setChecked(list.get(position).isSelected()); 
return view; 
} 

有一個oncheckedchange聽衆在這裏。

我的問題是如何傳遞信息,如列表項已更改爲我的主要活動?當複選框狀態發生變化時,我們還可以在主要活動中執行某些操作?

回答

1

其中一個想法是調用CheckBox.setTag(),將其標記爲希望容納的數據並使onCheckedChange偵聽器使用CheckBox.getTag()來檢索數據。你甚至可以通過XML與onClick這樣做。

+0

這工作出色。我使用onClick on xml來調用我主要活動中的onchecked方法,以及onchecked方法中的getTag()方法來檢查複選框的狀態。 THNX很多! :) – 2013-05-02 14:52:40

1

您可以檢查這個例子

http://appfulcrum.com/2010/09/12/listview-example-3-simple-multiple-selection-checkboxes/

那有如何在點擊操作的ListView和過程

您也可以找到關於如何使點擊這個有用的使用選擇複選框區域這樣的複選框等,因爲listviews實際上並不允許你直接檢查複選框本身

http://wiresareobsolete.com/wordpress/2011/08/clickable-zones-in-listview-items/

+0

我想把一個oncheckedchecked listner放在主要的action裏面我可以這樣做嗎? – 2013-05-02 13:52:31

+0

你可以做的是在主活動中聲明一個靜態方法,然後在列表視圖中的oncheckedlistener中調用主活動的靜態自定義onchecked監聽器方法 – o0rebelious0o 2013-05-02 13:57:26

+0

但是在靜態方法中,我無法操縱主活動的任何非靜態變量。 – 2013-05-02 14:00:45