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

Android ListView 點擊項目傳值彈出操作框:OnItemClickListener 獲取資料與 DialogFragment 最佳實踐

     編輯:程式設計綜合問答

核心介面


listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        // 1. 從適配器獲取資料
        MyItem item = (MyItem) parent.getAdapter().getItem(position);
        String fileName = item.getFileName();

        // 2. 彈出操作對話框 (推薦 DialogFragment)
        MyDialogFragment dialog = MyDialogFragment.newInstance(fileName);
        dialog.show(getSupportFragmentManager(), "action_dialog");
    }
});

DialogFragment 封裝傳值


public class MyDialogFragment extends DialogFragment {
    private static final String ARG_FILE = "arg_file";

    static MyDialogFragment newInstance(String fileName) {
        Bundle args = new Bundle();
        args.putString(ARG_FILE, fileName);
        MyDialogFragment f = new MyDialogFragment();
        f.setArguments(args);
        return f;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        String fileName = getArguments().getString(ARG_FILE);
        return new AlertDialog.Builder(requireContext())
            .setTitle("操作: " + fileName)
            .setItems(new String[]{"查看", "編輯", "刪除"}, (d, which) -> {
                // 處理各操作
            })
            .create();
    }
}

替代方案:RecyclerView (現代替代 ListView)


recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(context, (view, position) -> {
    MyItem item = adapter.getItem(position);
    // 同樣彈出 DialogFragment
}));

關鍵點總結

  • OnItemClickListener 參數 position 直接對應適配器索引。
  • 資料模型 MyItem 應實作 Serializable 或 Parcelable 以便 Bundle 傳遞。
  • 使用 DialogFragment 而非 AlertDialog.Builder 直接 show,可自動處理配置變更 (旋轉螢幕) 時的生命週期。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved