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

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

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

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

Android Studio

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

Kotlin

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

解決済

kotlin onItemClick処理について

aqua2021
aqua2021

総合スコア0

Realm

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

Android Studio

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

Kotlin

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

1回答

0評価

0クリップ

38閲覧

投稿2021/07/11 21:26

編集2022/01/12 10:58

前提・実現したいこと

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

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

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

該当のソースコード 

MainActivity

package com.example.mytodoapplication import android.content.Intent import android.os.Bundle import android.util.Log import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter import android.widget.ListView import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import com.example.mytodoapplication.databinding.ActivityMainBinding import io.realm.Realm import io.realm.RealmResults import java.util.* class MainActivity : AppCompatActivity() ,AdapterView.OnItemClickListener,AdapterView.OnItemLongClickListener { private lateinit var binding: ActivityMainBinding lateinit var realm: Realm lateinit var result: RealmResults<TaskDB> lateinit var task_list: ArrayList<String> lateinit var adapter: ArrayAdapter<String> override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) val listView: ListView = findViewById(R.id.listView) binding.buttonAddNewWord.setOnClickListener { val intent = Intent(this@MainActivity, EditActivity::class.java) intent.putExtra(getString(R.string.intent_key_status), getString(R.string.status_add)) startActivity(intent) } binding.listView.setOnItemClickListener(this) binding.listView.setOnItemLongClickListener(this) } override fun onResume() { super.onResume() val listView: ListView = findViewById(R.id.listView) realm = Realm.getDefaultInstance() result = realm.where(TaskDB::class.java).findAll().sort("strTime") task_list = ArrayList<String>() val length = result.size for (i in 0..length - 1) { if (result[i]!!.finishFrag) { task_list.add(result[i]!!.strTime + ":" + result[i]!!.strTask + "✔️") } else { task_list.add(result[i]!!.strTime + ":" + result[i]!!.strTask) } } var adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, task_list) listView.adapter = adapter } override fun onPause(){ super.onPause() realm.close() } override fun onItemClick(parent:AdapterView<*>?,view:View?,position:Int,id:Long){ val selectDB=result[position] val strSelectTime=result[position]!!.strTime val strSelectTask=result[position]!!.strTask val strSelectFrag=result[position]!!.finishFrag val intent=Intent(this@MainActivity,EditActivity::class.java).apply{ putExtra(getString(R.string.intent_key_time),strSelectTime) putExtra(getString(R.string.intent_key_task),strSelectTask) putExtra(getString(R.string.intent_key_frag),strSelectFrag) putExtra(getString(R.string.intent_key_position),position) putExtra(getString(R.string.intent_key_status),getString(R.string.status_change)) startActivity(intent) } } override fun onItemLongClick(parent:AdapterView<*>?,view:View?,position:Int,id:Long):Boolean{ val listView: ListView =findViewById(R.id.listView) val selectDB = result[position]!! val dialog = AlertDialog.Builder(this@MainActivity).apply { setTitle(selectDB.strTask + "の削除") setMessage("削除しても良いですか?") setPositiveButton("yes") { dialog, which-> realm.beginTransaction() selectDB.deleteFromRealm() realm.commitTransaction() task_list.removeAt(position) listView.adapter = adapter } setNegativeButton("no") { dialog, which-> } show() } return true } }

EditActivity

package com.example.mytodoapplication //import kotlinx.android.synthetic.main.activity_edit.* import android.os.Bundle import android.widget.CheckBox import android.widget.EditText import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.example.mytodoapplication.databinding.ActivityEditBinding import io.realm.Realm //import kotlinx.android.synthetic.main.activity_edit.* import java.text.SimpleDateFormat import java.util.* class EditActivity : AppCompatActivity() { lateinit var realm: Realm var strTime: String = "" var strTask: String = "" var intposition: Int = 0 var boolMemorize: Boolean = false private lateinit var binding:ActivityEditBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding=ActivityEditBinding.inflate(layoutInflater) setContentView(binding.root) var editTextTime:EditText=findViewById(R.id.editTextTime) var editTextTask:EditText=findViewById(R.id.editTextTask) var textViewStatus: TextView =findViewById(R.id.textViewStatus) var checkBox: CheckBox =findViewById(R.id.checkBox) val df = SimpleDateFormat("MM/dd HH:mm") val date = Date() editTextTime.setText(df.format(date)) val bundle = intent.extras val strStatus = bundle!!.getString(getString(R.string.intent_key_status)) textViewStatus.text = strStatus if (strStatus == getString(R.string.status_change)) { strTime = bundle.getString (getString(R.string.intent_key_time))!! strTask = bundle.getString(getString(R.string.intent_key_task))!! boolMemorize = bundle.getBoolean(getString(R.string.intent_key_frag)) editTextTime.setText(strTime) editTextTask.setText(strTask) checkBox.isChecked = boolMemorize intposition = bundle.getInt(getString(R.string.intent_key_position)) } binding.checkBox.setOnClickListener { boolMemorize = checkBox.isChecked } binding.buttonRegister.setOnClickListener { if (strStatus == getString(R.string.status_add)){ addNewTask() } else { changeTask() } } binding.buttonBack.setOnClickListener { finish() } } override fun onResume() { super.onResume() realm= Realm.getDefaultInstance() } override fun onPause() { super.onPause() realm.close() } private fun changeTask(){ val result=realm.where(TaskDB::class.java).findAll().sort("strTime") val selectDB=result[intposition]!! realm.beginTransaction() var editTextTime:EditText=findViewById(R.id.editTextTime) var editTextTask:EditText=findViewById(R.id.editTextTask) var textViewStatus: TextView =findViewById(R.id.textViewStatus) var checkBox: CheckBox =findViewById(R.id.checkBox) selectDB.strTime=editTextTime.text.toString() selectDB.strTask=editTextTask.text.toString() selectDB.finishFrag=boolMemorize realm.commitTransaction() editTextTime.setText("") editTextTask.setText("") Toast.makeText(this@EditActivity,"修正完了",Toast.LENGTH_SHORT).show() finish() } private fun addNewTask(){ var editTextTime:EditText=findViewById(R.id.editTextTime) var editTextTask:EditText=findViewById(R.id.editTextTask) realm.beginTransaction() val taskDB=realm.createObject(TaskDB::class.java) taskDB.strTime=editTextTime.text.toString() taskDB.strTask=editTextTask.text.toString() realm.commitTransaction() editTextTask.setText("") Toast.makeText(this@EditActivity,"登録完了",Toast.LENGTH_SHORT).show() } }

試したこと

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

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

AndroidStudio 4.2.1

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai
y_waiwai

2021/07/11 22:53

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

2021/07/11 23:56

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

2021/07/12 04:05

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

2021/07/12 04:53

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

2021/07/12 04:56

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

2021/07/12 08:45

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

2021/08/06 07:43

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Realm

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

Android Studio

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

Kotlin

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