从recyclerview到新活动的项,并从本地数据库获取当前数据



我是Kotlin的新手,正试图通过谷歌搜索和观看youtube来解决这个问题。找不到任何具体的问题,这些是:

  1. 点击recyclerview中的项目,打开一个新活动(已解决(
  2. 从新的活动中,我想从我单击的项目的本地数据库中获取当前数据
  3. 我得到了一个要使用的引用(clientId(,并想检查来自recyclerview的点击项目的clientId是否与新活动中本地数据库的相同

这是显示回收视图的"活动":

class ClientActivity : AppCompatActivity() {
private lateinit var binding: ClientActivityBinding
private lateinit var customerViewModel: CustomerViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ClientActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
//Recyclerview
val recyclerView = binding.clientRecyclerview
val adapter = ClientListAdapter()
recyclerView.adapter = adapter
val linearLayoutManager = LinearLayoutManager(this)
linearLayoutManager.orientation = LinearLayoutManager.VERTICAL
recyclerView.layoutManager = linearLayoutManager

//UserViewModel
customerViewModel = ViewModelProvider(this)[CustomerViewModel::class.java]
customerViewModel.readAllData.observe(this, Observer { customer ->
adapter.setData(customer)
})
adapter.setOnItemClickListener(object : ClientListAdapter.onItemClickListener{
override fun onItemClick(position: Int) {
Log.d("testar", position.toString())
val intent = Intent(this@ClientActivity,InfoActivity::class.java)
intent.putExtra("position",position)
startActivity(intent)
}
})
}

}

我的适配器:

class ClientListAdapter : RecyclerView.Adapter<ClientListAdapter.MyViewHolder>() {
private lateinit var clientListener : onItemClickListener
interface onItemClickListener {
fun onItemClick(position: Int)
}
fun setOnItemClickListener(listener : onItemClickListener){
clientListener = listener
}
private var customerList = emptyList<Customer>()
class MyViewHolder(itemView: View, listener: onItemClickListener) : RecyclerView.ViewHolder(itemView) {
val clientName : TextView = itemView.findViewById(R.id.clientTitle)
val clientID : TextView = itemView.findViewById(R.id.clientId)
init {
itemView.setOnClickListener {
listener.onItemClick(adapterPosition)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.client_item, parent, false)
return MyViewHolder(itemView,clientListener)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val customerSelected = customerList[position]
holder.clientName.text = customerSelected.name
holder.clientID.text = customerSelected.clientId
holder.itemView.setOnClickListener{
val title = customerSelected.name
val id = customerSelected.clientId
}
}
fun setData(customer : List<Customer>){
this.customerList = customer
notifyDataSetChanged()
}
override fun getItemCount(): Int {
return customerList.size
}

}

用于检查本地数据库中的clientId是否相同的新活动:

class InfoActivity : AppCompatActivity() {
private lateinit var binding: ActivityInfoBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityInfoBinding.inflate(layoutInflater)
setContentView(binding.root)
val clientPosition = intent.getStringExtra("position")
Log.d("WERA", clientPosition.toString())
}
}

我解决了这个问题。如果有人想知道的话,下面是代码:

override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val customerSelected = customerList[position]
holder.clientName.text = customerSelected.name
holder.clientID.text = customerSelected.clientId
holder.clientPhone.text = customerSelected.phone
holder.clientAddress.text = customerSelected.visitAddress
holder.clientCard.setOnClickListener {
val intent = Intent(context, InfoActivity::class.java)
intent.putExtra("clientName", holder.clientName.text)
intent.putExtra("clientId", holder.clientID.text)
context.startActivity(intent)
}
}

最新更新