前提・実現したいこと
追加したデータのリストを長押しするとアラートダイアログを表示させたい
該当のソースコード
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}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。