現象:CustomDialog.Builder.setSingleChoiceItems 設定 checkedItem 與 OnClickListener,但點擊確定時 which 永遠是初始值 0。
程式碼中:
lvListItem.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
positiveButtonClickListener.onClick(dialog, mClickedDialogEntryIndex); // 用的是建構時的值
}
});
mClickedDialogEntryIndex 在 Builder 建構時固定,未隨 ListView 選中項目更新。
lvListItem.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
mClickedDialogEntryIndex = position; // 即時更新
}
});
或直接在確定按鈕點擊時取得當前選中位置:
connectBtn.setOnClickListener(v -> {
int pos = lvListItem.getCheckedItemPosition();
positiveButtonClickListener.onClick(dialog, pos);
});
ListView.CHOICE_MODE_SINGLE 會自動維護選中狀態,getCheckedItemPosition() 即可取得。提問者後續自行解決,核心即為「即時查詢而非快取」。