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