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

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

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

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

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

Q&A

1回答

1120閲覧

データのリストを長押しするとアラートダイアログを表示させたい

yu9718s

総合スコア9

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

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

0グッド

0クリップ

投稿2020/06/11 02:07

前提・実現したいこと

追加したデータのリストを長押しするとアラートダイアログを表示させたい

該当のソースコード

kotlin

試したこと

TodoRecyclerViewAdapterで長押しするとMainActivityにIntentで飛ばして
MainActivityでアラートダイアログを表示させようとしております。
しかしAdapter側のview.setOnClickListener(ItemClickListener())にエラーが発生しております。
また、MainActivityのアダプタについても理解が浅く、val adapter = TodoRecyclerViewAdapter()の()内に何を入れるのかがわからないためエラーが発生しております・

MainActivity

1import android.content.Intent 2import android.os.Bundle 3import android.util.Log 4import android.view.View 5import androidx.appcompat.app.AppCompatActivity 6import androidx.recyclerview.widget.DividerItemDecoration 7import androidx.recyclerview.widget.LinearLayoutManager 8import androidx.recyclerview.widget.RecyclerView 9import io.realm.Realm 10import io.realm.Sort 11 12import kotlinx.android.synthetic.main.activity_main.* 13import kotlinx.android.synthetic.main.content_main.* 14 15class MainActivity : AppCompatActivity() { 16 private lateinit var realm: Realm 17 private lateinit var adapter: TodoRecyclerViewAdapter 18 private lateinit var layoutManager: RecyclerView.LayoutManager 19 20 override fun onCreate(savedInstanceState: Bundle?) { 21 super.onCreate(savedInstanceState) 22 setContentView(R.layout.activity_main) 23 setSupportActionBar(toolbar) 24 realm = Realm.getDefaultInstance() 25 26 val itemDecoration = DividerItemDecoration(this, DividerItemDecoration.VERTICAL) 27 recyclerView.addItemDecoration(itemDecoration) 28 29 fab.setOnClickListener { 30 val intent = Intent(this, EditActivity::class.java) 31 startActivity(intent) 32 } 33 val adapter = TodoRecyclerViewAdapter() 34 recyclerView.adapter = adapter 35 } 36 private inner class ItemClickListener : View.OnClickListener { 37 override fun onClick(v: View?) { 38 Log.i("MainActivity","onClick") 39 val dialogFragment = TodoDialogFragment() 40 dialogFragment.show(supportFragmentManager, "TodoDialogFragment") 41 } 42 } 43 44 override fun onStart() { 45 super.onStart() 46 val realmResults = realm.where(Todo::class.java) 47 .findAll() 48 .sort("todoId", Sort.DESCENDING) 49 50 layoutManager = LinearLayoutManager(this) 51 recyclerView.layoutManager = layoutManager 52 53 adapter = TodoRecyclerViewAdapter(realmResults) 54 recyclerView.adapter = this.adapter 55 } 56 57 override fun onDestroy() { 58 super.onDestroy() 59 realm.close() 60 } 61} 62 63

TodoRecyclerViewAdapter

1import android.content.Intent 2import android.view.LayoutInflater 3import android.view.ViewGroup 4import androidx.recyclerview.widget.RecyclerView 5import io.realm.RealmResults 6import android.text.format.DateFormat 7 8 9class TodoRecyclerViewAdapter(realmResults: RealmResults<Todo>) : RecyclerView.Adapter<ViewHolder>() { 10 private val rResults:RealmResults<Todo> = realmResults 11 12 override fun onCreateViewHolder(parent: ViewGroup, position: Int): ViewHolder { 13 val view = LayoutInflater.from(parent.context).inflate(R.layout.one_result,parent,false) 14 15 view.setOnClickListener(ItemClickListener()) 16 return ViewHolder(view) 17 } 18 19 override fun getItemCount(): Int { 20 return rResults.size 21 } 22 23 override fun onBindViewHolder(holder: ViewHolder, position: Int) { 24 val todo = rResults[position] 25 holder.dateText?.text = DateFormat.format("yyyy/MM/dd",todo?.created) 26 holder.limitdateText?.text = DateFormat.format("yyyy/MM/dd",todo?.limitDate) 27 holder.titleText?.text = todo?.title.toString() 28 holder.contentsText?.text = todo?.contents.toString() 29 30 holder.itemView.setOnLongClickListener{ 31 val intent = Intent(it.context, MainActivity::class.java) 32 intent.putExtra("todoId",todo?.todoId) 33 it.context.startActivity(intent) 34 true 35 } 36 } 37}

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

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

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

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

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

guest

回答1

0

しかしAdapter側のview.setOnClickListener(ItemClickListener())にエラーが発生しております。

エラーの詳細がないため予想になってしまいますがItemClickListenerがprivateになっているのが怪しく見えます

また、MainActivityのアダプタについても理解が浅く、val adapter = TodoRecyclerViewAdapter()の()内に何を入れるのかがわからないためエラーが発生しております

こちらも詳細なエラーがないことと、私がRealmを使用したことがないため完全に予想になりますが、
TodoRecyclerViewAdapter(realmResults: RealmResults<Todo>)と定義している以上インスタンスの作成にはrealmResultsが必要になると思います。

投稿2020/06/26 15:50

aaadedeaa

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問