【问题标题】:Android: pass data from RecyclerView to another ActivityAndroid:将数据从 RecyclerView 传递到另一个 Activity
【发布时间】:2020-03-26 16:35:44
【问题描述】:

我有一个 RecyclerView,当你点击一个项目时,我必须将数据传递给另一个活动。当有人点击第一个项目时,我需要将该项目的数据传递给一个活动。 这是fragment中recycler view所在的部分:

class TrafficFragment : Fragment() {
    private lateinit var trafficViewModel: TrafficViewModel
     override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            trafficViewModel =
                ViewModelProviders.of(this).get(TrafficViewModel::class.java)
            val root = inflater.inflate(R.layout.fragment_traffic, container, false)

        //...

        val recyclerViewTraffic: RecyclerView = root.findViewById(R.id.recyclerViewTraffic)
        recyclerViewTraffic.apply {
           layoutManager = LinearLayoutManager (this@TrafficFragment.context)
           Log.d("DEBUG", MainActivity.clickArray.toString())
            adapter  = TrafficAdapter(MainActivity.clickArray){
                var intent = Intent(activity, ClickDetail::class.java)
                startActivity(intent)
            }

        }


        return root
      }
    }

适配器:

package com.example.example

import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.traffic_recycler_layout.view.*

class TrafficAdapter(private val trafficClick: List<TrafficClick>, val clickDetail: () -> Unit) :
RecyclerView.Adapter<TrafficAdapter.ViewHolder>(){

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val layoutView = LayoutInflater.from(parent.context).inflate(R.layout.traffic_recycler_layout, parent, false)
        return ViewHolder(layoutView)


    }

    override fun getItemCount(): Int = MainActivity.clicksNumber

    companion object{
        var idClick: String?= String()
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val clicks = trafficClick[position]
        holder.view.indirizzoIp.text = "${clicks.ip}"
        holder.view.isp.text= "${clicks.organization}"
        holder.view.data.text = "${clicks.data_creation}"
        holder.view.numberText.text = "${clicks.id_campaign}"
        holder.view.setOnClickListener {
           clickDetail.invoke()
        }

    }


    class ViewHolder(val view: View) : RecyclerView.ViewHolder(view)

}

这是我在单击包含该项目详细信息的项目时需要打开的活动:

package com.example.example

import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.traffic_click_detail.*

class ClickDetail : AppCompatActivity(){

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.traffic_click_detail)


    }
}

【问题讨论】:

    标签: android kotlin android-activity android-recyclerview adapter


    【解决方案1】:
    var intent = Intent(activity, ClickDetail::class.java)
    intent.putExtra("your_key",MainActivity.clickArray.toString())
    startActivity(intent)
    
    class ClickDetail : AppCompatActivity(){
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.traffic_click_detail)
            val YourData =  getIntent().getStringExtra("your_key") 
        }
    }
    

    【讨论】:

    • Tnx 的答案。使用您的方法,我传递了所有数组。我只需要传递数组中一项的详细信息。不是回收器的整个数组。
    • holder.view.setOnClickListener { clickDetail.invoke(MainActivity.clickArray[holder.getAdapterPosition()]) }
      并将其添加到 TrafficFragment
      adapter.onItemClick = { MainActivity.clickArray -&gt; // do something with your item Log.d("TAG", MainActivity.clickArray) }
    【解决方案2】:

    如果我想你想传递和 id,替换它

    holder.view.setOnClickListener {
        clickDetail.invoke()
    }
    

    通过

    holder.view.setOnClickListener {
        ClickDetail.launch(holder.itemView.context, /*your ID*/)
    }
    

    然后去检索你的数据

    class ClickDetail : AppCompatActivity(){
        companion object {
            private const val EXTRA_KEY_ID = "CLICKDETAIL.EXTRA_KEY_ID"
    
            fun launch(launcher: Activity, id: Int) {
                val intent = Intent(launcher, ClickDetail::class.java)
                        .apply {
                            putExtra(EXTRA_KEY_ID, id)
                        }
                launcher.startActivity(intent)
            }
        }
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.traffic_click_detail)
            val id = intent.getIntExtra("EXTRA_KEY_ID") 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2016-01-18
      相关资源
      最近更新 更多