具有编辑文本和复选框的自定义列表视图

3
我刚开始学习编程,有问题使用getCheckedItemPositions()来处理复选框,并从自定义列表视图中获取编辑文本的值。有人能给我一个示例来创建具有上述功能的自定义列表视图吗?谢谢。
*以下是自定义列表视图的XML代码
<CheckBox android:id="@+id/checkBox" android:layout_height="wrap_content"
 android:layout_width="wrap_content" 
 android:layout_alignParentRight="true"
 android:text="CheckBox"
 android:onClick="clickHandler"
 ></CheckBox>
<TextView android:layout_height="wrap_content"
 android:layout_width="fill_parent" android:text="TextView" 
 android:id="@+id/textView1" 
 android:layout_alignParentLeft="true"
  android:layout_centerHorizontal="true" android:layout_marginBottom="14dp"

android:layout_toLeftOf="@+id/checkBox"是设置视图控件的相对位置,将该控件放置在id为checkBox的控件左侧。
这段代码用于设置ListView,其中lv1为ListView对象,adapter2为SimpleCursorAdapter适配器,用于将cursor2中的数据显示在自定义布局custom中的textView1上。
         lv1.setItemsCanFocus(false);
         lv1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
         lv1.setAdapter(adapter2);

这是我尝试检查时所做的:
当点击时,执行以下代码: public void onClick(View v) {
                int len = lv1.getCount();
                 SparseBooleanArray checked = lv1.getCheckedItemPositions();
                 for (int i = 0 ; i < len; i++)
                  if (checked.get(i)) {
                   String item = mArrayList.get(i);

                mItems.add(mArrayList.get(i));

             System.out.println(item);




                   /* do whatever you want with the checked item */
                  } 

但是这不起作用。我还想以这种方式使用edit text来获取值。当我检查并点击按钮时,应用程序终止。 Logcat when Onclick() trigurred

展示你尝试过的内容,这样我们才能指出你的错误所在... 我们不会替你编写代码。 - Barak
@Barak,我尝试的代码在上面..谢谢。 - Akz Li
@AlexLockwood,我尝试的代码在上面..谢谢。 - Akz Li
好的,谢谢你提供代码。现在请定义“不工作”的含义。你期望发生什么(或不期望发生什么)? - Barak
请也附上您的logcat日志,这将指导我们查找问题所在。 - Barak
@Barak 当我检查列表中的项并触发onclick()方法时,logcat没有给出System.out.println输出。 强制关闭发生。 - Akz Li
1个回答

1
以下代码将解决您的问题。
public class SimpleCursorAdapter extends ArrayAdapter {
    private Context mcontext;   
    private View rowview;
    LayoutInflater inflater;
    public static ArrayList<Boolean > itemchecked=new ArrayList<Boolean>();
    public SimpleCursorAdapter(Context context,ArrayList<String> mylist)
    {
        super(context,your layout id);
        mcontext=context;

        //this is the important step    
        for (int i = 0; i < this.getCount(); i++) 
        {
            itemchecked.add(i,false); // initializes all items value with false
        }
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        rowview=convertView;
        if(convertView==null)
        {
            rowview = inflater.inflate(R.yourlayout, parent, false);
        }

        TextView textView_heading = (TextView) rowview.findViewById(R.id.textView1);


        CheckBox checkbox_detail=(CheckBox) rowview.findViewById(R.id.checkBox1);
        checkbox_detail.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                CheckBox cb = (CheckBox) v.findViewById(R.id.checkBox1);

                if (cb.isChecked()) {
                    itemchecked.set(position, true);
                    // do some operations here
                } else if (!cb.isChecked()) {
                    itemchecked.set(position, false);
                    // do some operations here
                }   
            }
        });
        checkbox_detail.setChecked(itemchecked.get(position));
        textView_heading.setText(userheading_list.get(position));

        return rowview;
    }   
}
//now the custom list part finish

现在,要从列表中获取所有信息并查看哪个复选框被选中:

for(int i=0;i<yourlistadapterobject.getCount();i++)
{  
    View content_view=msg_adapter.getView(i,null , user_detail_list);
    System.out.println("the list count"+user_detail_list.getCount());
    if(MyContactAdapter.itemchecked.get(i))
    {
        System.out.println("is checked true"); 
        TextView tv_heading=  (TextView) content_view.findViewById(R.id.textView1);

        String text=tv_heading.getText();
    }
}

通过这样做,您可以获取所有已选中复选框的信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接