首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 自訂單選對話框:item 點擊位置傳遞始終為 0 的解決

     編輯:程式設計疑難解答

現象:CustomDialog.Builder.setSingleChoiceItems 設定 checkedItem 與 OnClickListener,但點擊確定時 which 永遠是初始值 0。

原因分析

程式碼中:

lvListItem.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        positiveButtonClickListener.onClick(dialog, mClickedDialogEntryIndex); // 用的是建構時的值
    }
});

mClickedDialogEntryIndex 在 Builder 建構時固定,未隨 ListView 選中項目更新。

修正:監聽 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() 即可取得。
  • 不要在 Builder 欄位快取位置,改為「用時查詢」。

提問者後續自行解決,核心即為「即時查詢而非快取」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved