我有ListView
,每行包含textview
和checkbox
。
允许用户点击每个TextView
,一旦他做了DialogBox
,就会向他提出他应该选择Yes
或No
的地方。
当他选择“否”时,需要自动勾选用户点击的CheckBox
旁边的TextView
。
我面临的问题是,无论用户选择哪个TextBox
,列表的最后CheckBox
都会一直被勾选,而不是所选{{1}旁边的那个}}
调试后我注意到这种情况正在发生,因为适配器类的TextView
方法在最后一行停止,因此总是选择最后一行。我尝试为每一行设置代码,这样我就可以相应地勾选getView()
,但不会勾选checkbox
。
我很感激有关此事的任何帮助。
Checkboxes
答案 0 :(得分:1)
尝试将行的复选框传递给您的点击侦听器:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
.....
holder.text.setOnClickListener(new MyClickListener(holder.chk);
}
private class MyClickListener implements OnClickListener
{
Checkbox checkbox = null;
public MyClickListener(final Checkbox checkbox)
{
this.checkbox = checkbox;
}
@Override
public void onClick(final View v)
{
final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("Materials");
builder.setMessage("Did you require any materials to fix this error?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
String clickedError;
clickedError = holder.text.getText().toString();
Intent intent = new Intent(mContext, Material.class);
intent.putStringArrayListExtra("materialList", materialList);
intent.putExtra("clickedError", clickedError);
intent.putExtra("repairID", repairID);
((Activity)mContext).startActivityForResult(intent, 1);
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
//checkbox.setChecked(true); // This ticks the last checkbox of the list.
if(checkbox.getTag() == v.getTag())
{
checkbox.setChecked(true);
}
}
});
builder.show();
}
});
答案 1 :(得分:1)
CheckBox扩展了TextView。使用CheckBox.setText(CharSequence | int)将文本设置为CheckBox并删除TextView(当然,这不会解决您的检查问题)。关于你的问题 - 这是因为大多数AdapterView都重用了Views。将检查的项目信息存储在某处并在getView中调用setChecked(checkedItems.get(pos))。
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
.....
holder.chk.setChecked(checkedItems.get(position))
.....
builder.setNegativeButton("No", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
//holder.chk.setChecked(true); // This ticks the last checkbox of the list.
if(holder.chk.getTag() == v.getTag())
{
holder.chk.setChecked(true);
checkedItems.put(position, true);
}
}
});
}
其中checkedItems是SparseBooleanArray