将数据从适配器发送到activity,getStringExtra()在第一次单击时返回null值

问题描述 投票:0回答:1

我尝试将数据从适配器A发送到活动A.在适配器A中,我使用了Intent.putExtra()并且它成功了。在活动A中,我使用getStringExtra()来获取数据。当我点击一个项目时,the getStringExtra()返回null值。但是,当我不关闭我的应用程序并再次单击相同的项目时,我得到了价值。

这是适配器A:

class AdapterA (private val daftarMeja: ArrayList<DaftarMeja.Meja>, private val clickListener: (DaftarMeja.Meja) -> Unit) : RecyclerView.Adapter<RecyclerView.ViewHolder>(){

companion object {
    const val ID_MEJA = "idMeja"
    const val STATUS_MEJA = "statusMeja"
}
override fun getItemCount(): Int {
    return daftarMeja.size
}

fun updateData(dataBaru: ArrayList<DaftarMeja.Meja>) {
    daftarMeja.clear()
    daftarMeja.addAll(dataBaru)
    notifyDataSetChanged()
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    val layoutInflater = LayoutInflater.from(parent.context)

    val cellForRow = layoutInflater.inflate(R.layout.item_meja,parent,false)
    return PartViewHolder(cellForRow)
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    (holder as PartViewHolder).bind(daftarMeja[position], clickListener)
}


inner class PartViewHolder (itemView: View): RecyclerView.ViewHolder(itemView){

    fun bind(meja: DaftarMeja.Meja, clicklistener: (DaftarMeja.Meja) -> Unit){
        itemView.tv_table_name.text = meja.nama
        if(meja.status){
            itemView.container_table.setBackgroundResource(R.color.colorTableAvailable)
            itemView.tv_table_name.setTextColor(Color.BLACK)
        }
        else {
            itemView.container_table.setBackgroundResource(R.drawable.gradient)
            itemView.tv_table_name.setTextColor(Color.WHITE)
        }
        itemView.setOnClickListener {   
            val intent = Intent(itemView.context, ActivityA::class.java)
            intent.putExtra(ID_MEJA, meja.id)
            intent.putExtra(STATUS_MEJA, meja.status)
            itemView.context.startActivity(intent)

            clicklistener(meja)
        }

    }
}

}

要获取活动A中的数据:

val idMeja = intent.getStringExtra(MejaAdapter.ID_MEJA)

单击该项目时:

private fun mejaItemClicked() {

    val intent = Intent(this, ActivityB::class.java)
    startActivity(intent)
}

我不知道问题出在哪里。请帮我解决这个问题

java android android-intent kotlin android-arrayadapter
1个回答
0
投票

1)在Activity onCreate()中,这是测试Bundle的正确模式

Bundle extras = getIntent().getExtras(); 
if (extras != null) 
{
  if (extras.containsKey("YOURNAMEPARAM")) 
   {....your assign}
}

2)当启动一个意图FIRST时,你会增加额外的意图值

 val intent = Intent(this, ActivityB::class.java)
 intent.putExtra("YOURNAMEPARAM",yourvalue);
 startActivity(intent)

3)确保传递的变量类型一致,并使用与变量对应的“PUT”和“GET”。

4)确保活动尚未打开,否则将不会调用onCreate()方法,并且不会重新评估您的getextra。

© www.soinside.com 2019 - 2024. All rights reserved.