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

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

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

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Android Studio

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

Kotlin

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

Q&A

解決済

1回答

2480閲覧

kotlin onItemClick処理について

aqua2021

総合スコア0

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2021/07/11 21:26

編集2021/07/12 04:50

前提・実現したいこと

ToDoListアプリを作成中です。
ListViewに表示されたタスクをOnItemClickにてクリックし、別画面(EditActivity)にて編集を行いたいのですが、クリック後画面遷移が行われません。

長押しonItemLongClickについては、動作しております。

MainActivity

1package com.example.mytodoapplication 2 3import android.content.Intent 4import android.os.Bundle 5import android.util.Log 6import android.view.View 7import android.widget.AdapterView 8import android.widget.ArrayAdapter 9import android.widget.ListView 10import androidx.appcompat.app.AlertDialog 11import androidx.appcompat.app.AppCompatActivity 12import com.example.mytodoapplication.databinding.ActivityMainBinding 13import io.realm.Realm 14import io.realm.RealmResults 15import java.util.* 16 17class MainActivity : AppCompatActivity() ,AdapterView.OnItemClickListener,AdapterView.OnItemLongClickListener { 18 private lateinit var binding: ActivityMainBinding 19 20 lateinit var realm: Realm 21 lateinit var result: RealmResults<TaskDB> 22 lateinit var task_list: ArrayList<String> 23 lateinit var adapter: ArrayAdapter<String> 24 25 override fun onCreate(savedInstanceState: Bundle?) { 26 super.onCreate(savedInstanceState) 27 binding = ActivityMainBinding.inflate(layoutInflater) 28 setContentView(binding.root) 29 30 val listView: ListView = findViewById(R.id.listView) 31 32 binding.buttonAddNewWord.setOnClickListener { 33 val intent = Intent(this@MainActivity, EditActivity::class.java) 34 35 intent.putExtra(getString(R.string.intent_key_status), getString(R.string.status_add)) 36 startActivity(intent) 37 38 } 39 40 binding.listView.setOnItemClickListener(this) 41 binding.listView.setOnItemLongClickListener(this) 42 } 43 44 45 override fun onResume() { 46 super.onResume() 47 48 val listView: ListView = findViewById(R.id.listView) 49 50 realm = Realm.getDefaultInstance() 51 52 result = realm.where(TaskDB::class.java).findAll().sort("strTime") 53 54 task_list = ArrayList<String>() 55 56 val length = result.size 57 for (i in 0..length - 1) { 58 if (result[i]!!.finishFrag) { 59 task_list.add(result[i]!!.strTime + ":" + result[i]!!.strTask + "✔️") 60 } else { 61 task_list.add(result[i]!!.strTime + ":" + result[i]!!.strTask) 62 } 63 } 64 65 var adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, task_list) 66 listView.adapter = adapter 67 68} 69 70 override fun onPause(){ 71 super.onPause() 72 73 realm.close() 74 } 75 76 override fun onItemClick(parent:AdapterView<*>?,view:View?,position:Int,id:Long){ 77 78 val selectDB=result[position] 79 val strSelectTime=result[position]!!.strTime 80 val strSelectTask=result[position]!!.strTask 81 val strSelectFrag=result[position]!!.finishFrag 82 val intent=Intent(this@MainActivity,EditActivity::class.java).apply{ 83 84 putExtra(getString(R.string.intent_key_time),strSelectTime) 85 putExtra(getString(R.string.intent_key_task),strSelectTask) 86 putExtra(getString(R.string.intent_key_frag),strSelectFrag) 87 putExtra(getString(R.string.intent_key_position),position) 88 putExtra(getString(R.string.intent_key_status),getString(R.string.status_change)) 89 startActivity(intent) 90 91 } 92 93 } 94 95 override fun onItemLongClick(parent:AdapterView<*>?,view:View?,position:Int,id:Long):Boolean{ 96 97 val listView: ListView =findViewById(R.id.listView) 98 99 val selectDB = result[position]!! 100 val dialog = AlertDialog.Builder(this@MainActivity).apply { 101 setTitle(selectDB.strTask + "の削除") 102 setMessage("削除しても良いですか?") 103 setPositiveButton("yes") { dialog, which-> 104 105 106 realm.beginTransaction() 107 selectDB.deleteFromRealm() 108 realm.commitTransaction() 109 task_list.removeAt(position) 110 listView.adapter = adapter 111 112 } 113 setNegativeButton("no") { dialog, which-> 114 } 115 show() 116 } 117 118 return true 119 } 120}

EditActivity

1package com.example.mytodoapplication 2 3//import kotlinx.android.synthetic.main.activity_edit.* 4import android.os.Bundle 5import android.widget.CheckBox 6import android.widget.EditText 7import android.widget.TextView 8import android.widget.Toast 9import androidx.appcompat.app.AppCompatActivity 10import com.example.mytodoapplication.databinding.ActivityEditBinding 11import io.realm.Realm 12//import kotlinx.android.synthetic.main.activity_edit.* 13import java.text.SimpleDateFormat 14import java.util.* 15 16class EditActivity : AppCompatActivity() { 17 18 lateinit var realm: Realm 19 var strTime: String = "" 20 var strTask: String = "" 21 var intposition: Int = 0 22 var boolMemorize: Boolean = false 23 24 private lateinit var binding:ActivityEditBinding 25 26 override fun onCreate(savedInstanceState: Bundle?) { 27 super.onCreate(savedInstanceState) 28 binding=ActivityEditBinding.inflate(layoutInflater) 29 setContentView(binding.root) 30 31 var editTextTime:EditText=findViewById(R.id.editTextTime) 32 var editTextTask:EditText=findViewById(R.id.editTextTask) 33 var textViewStatus: TextView =findViewById(R.id.textViewStatus) 34 var checkBox: CheckBox =findViewById(R.id.checkBox) 35 36 37 val df = SimpleDateFormat("MM/dd HH:mm") 38 val date = Date() 39 editTextTime.setText(df.format(date)) 40 41 val bundle = intent.extras 42 val strStatus = bundle!!.getString(getString(R.string.intent_key_status)) 43 textViewStatus.text = strStatus 44 45 if (strStatus == getString(R.string.status_change)) { 46 strTime = bundle.getString (getString(R.string.intent_key_time))!! 47 strTask = bundle.getString(getString(R.string.intent_key_task))!! 48 boolMemorize = bundle.getBoolean(getString(R.string.intent_key_frag)) 49 50 editTextTime.setText(strTime) 51 editTextTask.setText(strTask) 52 checkBox.isChecked = boolMemorize 53 54 intposition = bundle.getInt(getString(R.string.intent_key_position)) 55 } 56 57 binding.checkBox.setOnClickListener { 58 boolMemorize = checkBox.isChecked 59 } 60 61 binding.buttonRegister.setOnClickListener { 62 63 64 65 if (strStatus == getString(R.string.status_add)){ 66 67 addNewTask() 68 } else { 69 changeTask() 70 } 71 } 72 73 binding.buttonBack.setOnClickListener { 74 75 finish() 76 } 77 } 78 79 override fun onResume() { 80 super.onResume() 81 82 realm= Realm.getDefaultInstance() 83 } 84 85 override fun onPause() { 86 super.onPause() 87 88 realm.close() 89 } 90 91 private fun changeTask(){ 92 val result=realm.where(TaskDB::class.java).findAll().sort("strTime") 93 val selectDB=result[intposition]!! 94 realm.beginTransaction() 95 96 var editTextTime:EditText=findViewById(R.id.editTextTime) 97 var editTextTask:EditText=findViewById(R.id.editTextTask) 98 var textViewStatus: TextView =findViewById(R.id.textViewStatus) 99 var checkBox: CheckBox =findViewById(R.id.checkBox) 100 101 selectDB.strTime=editTextTime.text.toString() 102 selectDB.strTask=editTextTask.text.toString() 103 selectDB.finishFrag=boolMemorize 104 realm.commitTransaction() 105 106 editTextTime.setText("") 107 editTextTask.setText("") 108 109 Toast.makeText(this@EditActivity,"修正完了",Toast.LENGTH_SHORT).show() 110 finish() 111 112 } 113 114 private fun addNewTask(){ 115 116 var editTextTime:EditText=findViewById(R.id.editTextTime) 117 var editTextTask:EditText=findViewById(R.id.editTextTask) 118 realm.beginTransaction() 119 120 val taskDB=realm.createObject(TaskDB::class.java) 121 taskDB.strTime=editTextTime.text.toString() 122 taskDB.strTask=editTextTask.text.toString() 123 realm.commitTransaction() 124 editTextTask.setText("") 125 126 Toast.makeText(this@EditActivity,"登録完了",Toast.LENGTH_SHORT).show() 127 128 } 129} 130

試したこと

onItemClick(parent:AdapterView<*>?,view:View?,position:Int,id:Long)
下でLogを表示させることはできたので、クリックは認識しているようですが、編集画面(EditActivity)に変遷しませんでした。

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

AndroidStudio 4.2.1

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

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

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

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

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

y_waiwai

2021/07/11 22:53

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
aqua2021

2021/07/11 23:56

ご指摘ありがとうございます。
jimbe

2021/07/12 04:05

[発生している問題・エラーメッセージ] に出てくる MainActivity.kt:24 や MainActivity.kt:144 がソースコードに無いのですが、この例外はこのコードで出たもので無いのではないでしょうか。 例外を提示されるのであれば、その例外が出た時のコードを提示頂かなくては意味が有りません。
aqua2021

2021/07/12 04:53

大変失礼いたしました。おっしゃるとおりでした。 今回の質問では、エラーが表示されておりませんでした。
jimbe

2021/07/12 04:56

lateinit var adapter: ArrayAdapter<String> の初期化が見当たらないように思いますが、大丈夫なのでしょうか。
hoshi-takanori

2021/07/12 08:45

MainActivity の onResume で var adapter = 〜 としているので、ローカル変数になっちゃってますね。
退会済みユーザー

退会済みユーザー

2021/08/06 07:43

intentを作成しているのは確認できましたが クリックされたときにそのintentを使っていないのが原因ではないでしょうか onitemclicklistener内でputextra()とstartActivity()を使用してみてください
guest

回答1

0

自己解決

MainActivity

1override fun onItemClick(parent:AdapterView<*>?,view:View?,position:Int,id:Long){ 2 3 val selectDB=result[position] 4 val strSelectTime=result[position]!!.strTime 5 val strSelectTask=result[position]!!.strTask 6 val strSelectFrag=result[position]!!.finishFrag 7 val intent=Intent(this@MainActivity,EditActivity::class.java).apply{ 8 9 putExtra(getString(R.string.intent_key_time),strSelectTime) 10 putExtra(getString(R.string.intent_key_task),strSelectTask) 11 putExtra(getString(R.string.intent_key_frag),strSelectFrag) 12 putExtra(getString(R.string.intent_key_position),position) 13 putExtra(getString(R.string.intent_key_status),getString(R.string.status_change)) 14 15 16 } 17 startActivity(intent) 18 19 }

startActivity(intent)をonItemClickの外に記述することで解決しました。
コメントいただきました皆様ありがとうございました。

投稿2021/08/26 21:18

aqua2021

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問