选中复选框并单击android中相同的listview中的列表项

选中复选框并单击android中相同的listview中的列表项,android,android-listview,onitemclicklistener,Android,Android Listview,Onitemclicklistener,我已经在android listview的单选模式下实现了一个带有复选框的自定义listview。我想要一个功能,当我点击复选框时,对应于该复选框的行必须被添加,或者说该行中显示的Person对象应该被添加到另一个列表中,并从该列表中删除,等等itemclick在该listview上的操作会将我带到android中的另一个屏幕。我尝试了其他方法,但他们指定复选框需要可聚焦:false。此外,我希望click listener仅处理复选框。请提供任何建议或帮助。提前感谢 这个id表示xml代码 &

我已经在android listview的单选模式下实现了一个带有复选框的自定义listview。我想要一个功能,当我点击复选框时,对应于该复选框的行必须被添加,或者说该行中显示的Person对象应该被添加到另一个列表中,并从该列表中删除,等等itemclick在该listview上的操作会将我带到android中的另一个屏幕。我尝试了其他方法,但他们指定复选框需要可聚焦:false。此外,我希望click listener仅处理复选框。请提供任何建议或帮助。提前感谢

这个id表示xml代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <CheckBox
        android:id="@+id/projects_check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginStart="5dp"
        android:layout_marginTop="5dp"
        android:focusable="false" />

    <TextView
        android:id="@+id/project_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/projects_check"
        android:layout_alignBottom="@+id/projects_check"
        android:layout_marginLeft="10dp"
        android:layout_marginStart="10dp"
        android:layout_toEndOf="@+id/projects_check"
        android:layout_toRightOf="@+id/projects_check"
        android:text="TextView" />

</RelativeLayout>
这是我的onitem click侦听器代码

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long arg3) {
        Projects info = (Projects) parent.getItemAtPosition(position);
        info.toggleChecked();
        ProjectsHolder viewHolder = (ProjectsHolder) view.getTag();
        viewHolder.getmChoiceSelect().setChecked(info.isChecked());
        if (viewHolder.getmChoiceSelect().isChecked()) {
            completed_projects.add(info);
            mCompProjAdapter.notifyDataSetChanged();
            projects_list.remove(info);
            mProjAdapter.notifyDataSetChanged();
        }
    }

要管理对行本身的单击,只需为listView本身编写侦听器。 这就是我如何管理复选框单击

 class CustomAdapter extends ArrayAdapter<BeanClass> {

            private ArrayList<BeanClass> items;

            public FieldPlannedAdapter(Context context,
                    ArrayList<BeanClass> items) {
                super(context, R.layout.custom_list_row, items);

                this.items = items;
            }

            public class ViewHolder {

                protected CheckBox checkbox;
                protected TextView name;

            }

            @Override
            public View getView(final int position, View convertView,
                    ViewGroup parent) {

                final ViewHolder viewHolder;

                if (convertView == null) {

                    LayoutInflater inflater = (LayoutInflater) getActivity()
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = inflater.inflate(R.layout.custom_list_row,
                            null);
                    viewHolder = new ViewHolder();
                    viewHolder.checkbox = (CheckBox) convertView
                            .findViewById(R.id.checkIsMissed);

                    viewHolder.name = (TextView) convertView
                            .findViewById(R.id.txtViewMTPname);


                    convertView.setTag(viewHolder);


                    viewHolder.checkbox
                            .setOnClickListener(new View.OnClickListener() {
                                public void onClick(View v) {
                                    final CheckBox cb = (CheckBox) v;
                                    final BeanClass item = (BeanClass) cb
                                            .getTag();

                                    item.setSelected(cb.isChecked());


                                    if (cb.isChecked()) {
                                        // DO SOMETHING

                                    } else {

                                    }



                                }
                            });


                } else {
                    viewHolder = (ViewHolder) convertView.getTag();
                }

                BeanClass item = items.get(position);
                viewHolder.name.setTag(item);

                viewHolder.checkbox.setTag(item);


                viewHolder.name.setText(item.getName());

                viewHolder.checkbox.setChecked(item.isSelected());

                if (viewHolder.checkbox.isChecked()) {
                    // DO SOMETHING

                } else {
                    // DO SOMETHING
                }

                return convertView;
            }
        }
自定义行示例:


建议使用自定义适配器并在此处处理复选框和文本视图的单击事件,而不是列表视图的setOnItemClickListener。但是,由于复选框是在自定义适配器中实现的,因此如何将复选框的单击操作放入片段中?您必须在自定义适配器中写入复选框和文本框的单击事件。我尝试了这样做但在完成您的过程后,复选框仍然是列表行的一部分,因此我无法在listview上实现onitem click listener OnItemClick listener,在onCreateYes中,我已经在包含listview的fragment类中这样做了,但是由于列表行是自定义的,所以复选框位于前台,除了复选框之外,我无法单击任何内容。请您也添加onitem单击代码。只需一个简短的解释就可以了,例如:单击项目时显示祝酒词。谢谢advanceI问您这个问题是因为我实现了onitem click listener,但仍然无法获得click。我将添加一个行示例。试着根据这个来调整你的布局,
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp" >

    <LinearLayout
        android:id="@+id/row"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/card_ui"
        android:descendantFocusability="blocksDescendants"
        android:orientation="vertical"
        android:paddingBottom="10dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="10dp" >

        <TextView
            android:id="@+id/txtViewMTPname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Customer Name"
            android:textColor="@drawable/text_selector"
            android:textSize="14sp"
            android:textStyle="bold" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/txtViewMtpDarCity"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:text="dgdgdgdg"
                android:textColor="@drawable/text_selector"
                android:textSize="16sp"
                android:textStyle="italic" />

            <CheckBox
                android:id="@+id/checkIsMissed"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="5dp"
                android:gravity="center"
                android:text="Missed" />


        </LinearLayout>
    </LinearLayout>

</FrameLayout>