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")
}
}
我有一个 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")
}
}