質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

741閲覧

ListVewでクリックしたリストを.remove()したい

glanglan

総合スコア36

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2021/08/25 21:25

編集2021/08/25 22:20

前提・実現したいこと

AndroidStudioで簡単なリスト表示を勉強中です。
アイテムを追加するadd()は上手くできたのですが
クリックしたリストを削除するremove()がどうも上手く動きません。
下記コードのどこが間違っているのでしょうか?

発生している問題・エラーメッセージ

エラーメッセージ、というか、 タッチしても無反応。

該当のソースコード

kotlin

1class MainActivity : AppCompatActivity() { 2 override fun onCreate(savedInstanceState: Bundle?) { 3 super.onCreate(savedInstanceState) 4 setContentView(R.layout.activity_main) 5 6 val myButton:Button = findViewById(R.id.myButton) 7 val myListView:ListView=findViewById(R.id.myListView) 8 9 val adapter = ArrayAdapter<String>( 10 this, 11 android.R.layout.simple_list_item_1, 12 mutableListOf() 13 ) 14 myListView.adapter=adapter 15 16 //略 17 18 //クリックしたListViewのアイテムを削除したい 19 myListView.setOnItemClickListener { adapterView, view, i, l -> 20 adapter.remove(i.toString()) 21 adapter.notifyDataSetChanged() 22 } 23 } 24}

試したこと

remove()を使うこと自体はあっていると思うのですが
中が「i.toString()」じゃなくて、リスト[i]とかなのでは?
と想像するのですが、そもそもリスト自体がmutableListOf()で空っぽなので、
そこで行き詰ってしまいました。

補足情報(FW/ツールのバージョンなど)

AndroidStudio 2020.3.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

中が「i.toString()」じゃなくて、リスト[i]とかなのでは?

adapter から i 番目の要素を取得するのは adapter.getItem(i) でできます。
が、これだと同じ文字列が複数ある場合、後ろの項目を消そうとしても最初のやつが消えてしまいます。

ので、index を指定して消す必要がありますが、ArrayAdapter には remove しかなくて removeAt がないので、list に対して行う必要があります。

diff

1+ val list = mutableListOf<String>() 2 val adapter = ArrayAdapter<String>( 3 this, 4 android.R.layout.simple_list_item_1, 5- mutableListOf() 6+ list 7 ) 8 myListView.adapter=adapter 9 10 // 略 11 12 //クリックしたListViewのアイテムを削除したい 13 myListView.setOnItemClickListener { adapterView, view, i, l -> 14- adapter.remove(i.toString()) 15+ list.removeAt(i) 16 adapter.notifyDataSetChanged() 17 }

そもそもリスト自体がmutableListOf()で空っぽなので、

最初は空ですが、mutable なので変更可能であり、要素が追加されれば空ではなくなります。

投稿2021/08/25 21:57

hoshi-takanori

総合スコア7899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

glanglan

2021/08/25 22:20

なるほど、勉強になりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問