こんにちは。
今、RecycleViewとcardViewを使って個人アプリ開発をしています。(初心者です)
RecyclerViewにあるcardViewをタップ時にcardViewの中にあるtextViewやbackgroundを変えたりする方法はわかりますが、cardViewに直接触れずに、recyclerViewの外側にあるボタンをタップした時にcardViewの中にある情報の変更を行いたいです。
<自分で試してみたこと>
・変化を起こしたいcardViewの中にあるtextViewと同じワードをアダプタークラスに取り入れ、そのワードをもとにholderを取得しようとしたが結局方法が見つからない。(cardViewの中の情報に触れるには、そのカードビューのViewholderを取得しなければならないと認識しています)
holderをItemViewの情報から特定できれば解決すると思っています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
![guest](/img/icon/icnUserSample.jpg)
回答2件
0
Adapter内でデータを更新し、更新した行に対してRecyclerView#Adapter#notifyItemChanged
メソッドを呼び出せば、その行に対してRecyclerView#Adapter#onBindViewHolder
メソッドが呼び出されるので、ビューの更新を行います。
kotlin
1package com.example.test0617a 2 3import android.os.Bundle 4import androidx.appcompat.app.AppCompatActivity 5import androidx.recyclerview.widget.RecyclerView 6import android.content.Context 7import android.view.View 8import android.widget.TextView 9import androidx.recyclerview.widget.LinearLayoutManager; 10import android.view.ViewGroup 11import android.view.LayoutInflater 12import android.widget.Button 13import android.graphics.Color 14 15class MainActivity : AppCompatActivity() 16{ 17 override fun onCreate(savedInstanceState: Bundle?) 18 { 19 super.onCreate(savedInstanceState) 20 this.setContentView(R.layout.main_activity) 21 22 val recyclerView: RecyclerView = this.findViewById(R.id.recycler_view) 23 recyclerView.setLayoutManager(LinearLayoutManager(this)) 24 recyclerView.setAdapter(MyAdapter(this)) 25 26 this.findViewById<Button>(R.id.button).setOnClickListener({ 27 val textView = this@MainActivity.findViewById<TextView>(R.id.target) 28 val target: String = textView.getText().toString() 29 val adapter = recyclerView.getAdapter() as MyAdapter 30 adapter.countTarget(target) 31 }) 32 } 33 34 class MyAdapter(private val context: Context) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() 35 { 36 class Item(val label: String) 37 { 38 var count = 0 39 } 40 41 var items = arrayOf<Item>() 42 43 init { 44 this.items += Item("hoge") 45 this.items += Item("piyo") 46 this.items += Item("fuga") 47 } 48 49 class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) 50 { 51 } 52 53 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) : MyViewHolder 54 { 55 return MyViewHolder(LayoutInflater.from(this.context).inflate(android.R.layout.simple_list_item_1, parent, false)); 56 } 57 58 override fun onBindViewHolder(viewHolder: MyViewHolder, position: Int) 59 { 60 val item = this.items[position] 61 val textView: TextView = viewHolder.itemView.findViewById(android.R.id.text1) 62 textView.setText(item.label + " " + item.count.toString()) 63 viewHolder.itemView.setBackgroundColor(if (item.count % 2 == 0) Color.RED else Color.GREEN) 64 } 65 66 override fun getItemCount() : Int 67 { 68 return this.items.size 69 } 70 71 // 渡された文字列にあった行をカウントアップ 72 fun countTarget(target: String) : Unit 73 { 74 for ((index, item) in this.items.withIndex()) { 75 if (item.label == target) { 76 item.count += 1 77 this.notifyItemChanged(index) 78 } 79 } 80 } 81 } 82} 83
(勉強がてら初めてkotlinで書いたので、kotlinの文法は参考にしないように(笑))
(編集: せっかくなので、背景色を変えてみた)
後はnotifyItemChanged
でググれば他にも情報が出てくると思います。
投稿2020/06/17 14:06
編集2020/06/17 14:19総合スコア3491
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。