Android:将数据从 RecyclerView 传递到另一个 Activity

Android: pass data from RecyclerView to another Activity

我有一个 RecyclerView,当您单击某个项目时,我必须将数据传递给另一个 activity。当有人点击第一个项目时,我需要将该项目的数据传递给 activity。 这是回收站视图所在的片段部分:

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)

}

这是 activity,当我点击带有该项目详细信息的项目时,我需要打开它:

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)


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

如果我想你想传递和 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") 
    }
}