我有一個ListView
,每行都包含textview
和checkbox
。BaseAdapter自動檢查中的複選框
允許用戶點擊每個TextView
,有一次他做了DialogBox
呈現給他,他預計將要麼選擇Yes
或No
。
當他選擇否時,TextView
旁邊的CheckBox
用戶點擊需要自動打勾。
,我面臨的問題是,無論哪個TextBox
用戶選擇,在列表的最後CheckBox
被選中的時候,而不是一個接一個地選擇TextView
。
調試後我發現這是因爲適配器類的getView()
方法在最後一行停止,因此最後一行總是被選中。我試着爲每一行設置標籤,這樣我就可以相應地勾選checkbox
,但之後都不會打勾Checkboxes
。
我將不勝感激在這個問題上的任何幫助。
....
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
.....
holder.text.setOnClickListener(new View.OnClickListener()
{
@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)
{
//holder.chk.setChecked(true); // This ticks the last checkbox of the list.
if(holder.chk.getTag() == v.getTag())
{
holder.chk.setChecked(true);
}
}
});
builder.show();
}
});
這是行不通的。 – ClaireG
你能更具體嗎?您可能必須確保您傳遞了適當的變量,例如mContext和clickedError(來自holder.text.getText()),因爲您正在引用這些對象。 –
首先我不能比較v的getTag和'if(checkbox.getTag()== v.getTag())'的複選框,因爲v的生命只在getView()內開始和結束。其次,我認爲從View分離onClickListener將不會產生任何影響,因爲這裏的問題是getView()方法自創建它以來仍然突出顯示列表視圖的最後一行。這導致我得到最後一個複選框。無論如何,我認爲這是問題。 – ClaireG