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

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

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Android Studio

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

Kotlin

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

Q&A

解決済

1回答

908閲覧

ListViewのデータをすべて次の画面に渡す方法

akira3213

総合スコア1

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2021/05/04 15:38

やりたいこと

プレイヤーをEditTextで追加した後、そのプレイヤー名を次の画面に渡したいです。
ListViewに入っている数をひろってループさせると想像しているのですが、やり方がわからずアプリが落ちてしまいます。
どのように記述すればうまく渡せるでしょうか。

ヘディングのテキスト

kotlin

1package com.example.mollkyscorebook_ver11 2 3import android.content.Intent 4import androidx.appcompat.app.AppCompatActivity 5import android.os.Bundle 6import android.view.View 7import android.widget.* 8 9class MainActivity : AppCompatActivity() { 10 private val playerList = mutableListOf<String>() 11 private lateinit var adapter: ArrayAdapter<String> 12 13 override fun onCreate(savedInstanceState: Bundle?) { 14 super.onCreate(savedInstanceState) 15 setContentView(R.layout.activity_main) 16 17 adapter = ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, playerList) 18 findViewById<ListView>(R.id.playerList).adapter=adapter 19 20 findViewById<Button>(R.id.addPlayerBtn).setOnClickListener(addPlayer()) 21 findViewById<ListView>(R.id.playerList).onItemLongClickListener = ListIemClickListener() 22 23 findViewById<Button>(R.id.startGame).setOnClickListener(startGame()) 24 } 25 26 private inner class addPlayer : View.OnClickListener{ 27 override fun onClick(view: View) { 28 val displayPlayerList = findViewById<ListView>(R.id.playerList) 29 val newPlayerName=findViewById<EditText>(R.id.newPlayerName) 30 31 playerList.add(newPlayerName.text.toString()) 32 adapter.notifyDataSetChanged() 33 newPlayerName.setText("") 34 } 35 } 36 37 private inner class ListIemClickListener :AdapterView.OnItemLongClickListener{ 38 override fun onItemLongClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long): Boolean { 39 playerList.removeAt(position) 40 adapter.notifyDataSetChanged() 41 return false 42 } 43 } 44 45 private inner class startGame : View.OnClickListener{ 46 override fun onClick(view: View) { 47 var count = adapter.getCount() 48 val intentGame = Intent(this@MainActivity, ScoreBook::class.java) 49 50 for(i in 1..count){ 51 intentGame.putExtra("player$(i)", adapter.getItem(i)) 52 } 53 startActivity(intentGame) 54 } 55 } 56}

環境

Android Studio4.1, Windows10

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

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

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

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

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

hoshi-takanori

2021/05/04 15:46

「ListView がデータを持ってる」という考え方が間違いで、アプリが持ってるデータ (この場合は playerList) を adapter 経由で ListView に表示しているに過ぎません。ので、playerList を渡せば良いと思います。
akira3213

2021/05/04 16:12 編集

ありがとうございます。intentGameの宣言後に intentGame.putExtra("player", playerList) としてみたのですが、"None of the following functions can be called with the arguments supplied:ent"とエラーが出てしまいました。どのようにplayerListを渡すことができるのでしょうか。 public open fun putExtra(p0: String!, p1: String?): Intent defined in android.content.Intent
akira3213

2021/05/05 04:44

解決できました。ありがとうございます。
guest

回答1

0

自己解決

playerListの宣言をmubaleListOfからArrayListに変更したところ渡すことができました。

kotlin

1package com.example.mollkyscorebook_ver11 2 3import android.content.Intent 4import androidx.appcompat.app.AppCompatActivity 5import android.os.Bundle 6import android.view.View 7import android.widget.* 8 9class MainActivity : AppCompatActivity() { 10 private val playerList = ArrayList<String>() 11 private lateinit var adapter: ArrayAdapter<String> 12 13 override fun onCreate(savedInstanceState: Bundle?) { 14 super.onCreate(savedInstanceState) 15 setContentView(R.layout.activity_main) 16 17 adapter = ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, playerList) 18 findViewById<ListView>(R.id.playerList).adapter=adapter 19 20 findViewById<Button>(R.id.addPlayerBtn).setOnClickListener(addPlayer()) 21 findViewById<ListView>(R.id.playerList).onItemLongClickListener = ListIemClickListener() 22 23 findViewById<Button>(R.id.startGame).setOnClickListener(startGame()) 24 } 25 26 private inner class addPlayer : View.OnClickListener{ 27 override fun onClick(view: View) { 28 val displayPlayerList = findViewById<ListView>(R.id.playerList) 29 val newPlayerName=findViewById<EditText>(R.id.newPlayerName) 30 31 playerList.add(newPlayerName.text.toString()) 32 adapter.notifyDataSetChanged() 33 newPlayerName.setText("") 34 } 35 } 36 37 private inner class ListIemClickListener :AdapterView.OnItemLongClickListener{ 38 override fun onItemLongClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long): Boolean { 39 playerList.removeAt(position) 40 adapter.notifyDataSetChanged() 41 return false 42 } 43 } 44 45 private inner class startGame : View.OnClickListener{ 46 override fun onClick(view: View) { 47 val intentGame = Intent(this@MainActivity, ScoreBook::class.java) 48 intentGame.putStringArrayListExtra("playerList", playerList) 49 50 startActivity(intentGame) 51 } 52 } 53}

投稿2021/05/05 04:46

akira3213

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問