2013-05-02 98 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