Привязать данные RecyclerView к новой активности (Android-Kotlin) - PullRequest
0 голосов
/ 24 марта 2019

Привет, ребята. Я хочу передать данные, используемые для заполнения вьюблера.

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)
            }

        }
    }

}

Как вы можете видеть, я пытаюсь передать данные новому действию ... Какой самый лучший способ рекламы - это простой способсделай это

1 Ответ

0 голосов
/ 25 марта 2019

Оптимизированный код для передачи данных из RecyclerView в Activity:

Это код адаптера:

  1. Я не использовал синтетику Kotlin для и использовал вид в onBindViewHolder() из-за проблемы каждый раз, когда он выбирает представление и показывает его, и это не лучшая практика, мы используем ViewHolder только для того, чтобы победить эту цель и добиться кэширования. Посмотрите, как я делаю это во внутреннем классе.

  2. Для оптимизированного кода я использовал эту прекрасную библиотеку. Anko - это библиотека Kotlin, которая делает разработку приложений для Android быстрее и проще. Он делает ваш код чистым и легким для чтения, а также позволяет забыть о неровностях Android SDK для 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)
            }
        }
    }
    

    }

Также как это использовать!

В действии: Кроме того, расширяйте класс данных Tree с помощью Serializable!

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
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...