やりたいこと
プレイヤーを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
「ListView がデータを持ってる」という考え方が間違いで、アプリが持ってるデータ (この場合は playerList) を adapter 経由で ListView に表示しているに過ぎません。ので、playerList を渡せば良いと思います。
ありがとうございます。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
playerList の型を ArrayList<String> に変更して、putStringArrayListExtra を使えば良いのでは。
private val playerList = ArrayList<String>()
https://developer.android.com/reference/android/content/Intent#putStringArrayListExtra(java.lang.String,%20java.util.ArrayList%3Cjava.lang.String%3E)
解決できました。ありがとうございます。
回答1件
あなたの回答
tips
プレビュー