简体   繁体   English

将RecyclerView数据绑定到新活动(Android-Kotlin)

[英]Bind RecyclerView Data To New Activity (Android-Kotlin)

Hello Guys i want pass on the data used to populate the recyclerview. 你好,我想要传递用于填充recyclerview的数据。

class RecyclerViewAdapter(val list: List<ListModel>): RecyclerView.Adapter<RecyclerViewAdapter.ListViewHolder>(){

    override fun onCreateViewHolder(p0: ViewGroup, p1: Int): ListViewHolder {
        val layoutInflater = LayoutInflater.from(p0.context)
        val itemlist = layoutInflater.inflate(R.layout.recycler_item,p0,false)
        return ListViewHolder(itemlist)
    }

    override fun onBindViewHolder(p0: ListViewHolder, p1: Int) {
        val myList: ListModel = list[p1]

        p0.itemView.txtImageName?.text = myList.title
        Glide.with(p0.itemView.context)
            .load(myList.postimg)
            .into(p0.itemView.listImage);

    }

    override fun getItemCount(): Int {
        return list.size
    }

    inner class ListViewHolder(v: View) : RecyclerView.ViewHolder(v){
        init {
            v.setOnClickListener {
                val intent = Intent(v.context, WebviewActivity::class.java)
                intent.putExtra("key", "testfromact") //this is where i want to put myList.title variable
                v.context.startActivity(intent)
            }

        }
    }

}

As you can see im trying pass the data to the new activity... What is the best ad easy way to do this 正如您所看到的,即时通讯尝试将数据传递给新活动...最简单的广告方式是什么?

Optimized code for passing data from RecyclerView to Activity: 用于将数据从RecyclerView传递到Activity的优化代码:

This is the Adapter code: 这是适配器代码:

  1. I haven't used Kotlin synthetic to and used the view in onBindViewHolder() because of the problem, each time it will fetch the view and show it and it's not best practice, we use ViewHolder only to defeat this purpose and achieve caching. 我没有使用Kotlin合成并使用onBindViewHolder()的视图因为问题,每次它将获取视图并显示它并且这不是最佳实践,我们仅使用ViewHolder来实现此目的并实现缓存。 So look How I'm doing that in the inner class. 那么看看我是如何在内部阶级做到的。

  2. For optimized code, I used this beautiful library. 为了优化代码,我使用了这个漂亮的库。 Anko is a Kotlin library which makes Android application development faster and easier. Anko是一个Kotlin库,可以更快,更轻松地开发Android应用程序。 It makes your code clean and easy to read, and lets you forget about rough edges of the Android SDK for Java. 它使您的代码清晰易读,让您忘记Android SDK for Java的粗糙边缘。

     class TreeAdapter(private val listSurveyData: List<Tree>, val context: Context) : RecyclerView.Adapter<TreeAdapter.TreeViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TreeViewHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout_tree, parent, false) return TreeViewHolder(view) } override fun getItemCount(): Int = listSurveyData.size override fun onBindViewHolder(holder: TreeViewHolder, position: Int) { holder.setUpViewHolder(listSurveyData[position]) } inner class TreeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { private val txtSpeciesName: TextView = itemView.txt_speciesName private val ctlContainer: ConstraintLayout = itemView.ctl_container fun setUpViewHolder(tree: Tree) { txtSpeciesName.text = tree.species ctlContainer.setOnClickListener { context.startActivity<MainActivity>(SURVERY_DATA_KEY to tree) } } } 

    } }

Also How to use it! 另外如何使用它!

In Activity: Also, Extend the Tree data class with Serializable! 在Activity中:另外,使用Serializable扩展Tree数据类!

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val tree = intent.getSerializableExtra(SURVERY_DATA_KEY) as Tree
    } 
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM