【Android】ListViewの長押しでダイアログを表示する方法

2019年3月27日

本稿ではListViewを長押しした時に削除確認ダイアログを表示後に、

「はい」を押せば選択したListViewを削除し

「いいえ」を押せば削除しない実装の方法を説明致します。

 

 

onItemLongClickにダイアログ表示処理を実装する

ListViewを長押しした時にコールされるメソッドonItemLongClickにダイアログ表示の実装をしていきます。

下記のコードをご覧ください。

        //リスト項目を長押しした時の処理
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            /**
             * @param parent ListView
             * @param view 選択した項目
             * @param position 選択した項目の添え字
             * @param id 選択した項目のID
             */
            public boolean onItemLongClick(AdapterView<?> parent, final View view, final int position, long id) {
                AlertDialog.Builder builder = new AlertDialog.Builder(ListActivity.this);
                builder.setTitle(getString(R.string.dialog_title))
                        .setMessage(getString(R.string.dialog_message))
                        .setPositiveButton(getString(R.string.dialog_positive), new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // 選択されたビューを取得 TwoLineListItemを取得した後、text2の値を取得する
                                TwoLineListItem two = (TwoLineListItem) view;
                                TextView idTextView = (TextView) two.getText2();
                                String idStr = (String) idTextView.getText();
                                // 長押しした項目をデータベースから削除
                                SQLiteDatabase db = helper.getWritableDatabase();
                                try {
                                    db.execSQL("DELETE FROM MEMO_TABLE WHERE uuid = '" + idStr + "'");
                                } finally {
                                    db.close();
                                }
                                // remove item from ArrayList
                                memoList.remove(position);
                                // update ListView
                                simpleAdapter.notifyDataSetChanged();
                                Toast.makeText(ListActivity.this, "削除しました", Toast.LENGTH_SHORT).show();
                            }
                        })
                        .setNegativeButton(getString(R.string.dialog_negative), null)
                        .setCancelable(true);
                // show dialog
                builder.show();
                // trueにすることで通常のクリックイベントを発生させない
                return true;
            }
        });