Отправьте данные из адаптера в активность, а getStringExtra () вернет нулевое значение при первом нажатии - PullRequest
0 голосов
/ 07 февраля 2019

Я пытался отправить данные из адаптера A в Activity A. В адаптере AI использовался Intent.putExtra(), и это успешно.И в Деятельности AI использовал getStringExtra() для получения данных.Когда я щелкнул элемент, the getStringExtra() возвращает нулевое значение.Но когда я не закрываю свое приложение и снова не щелкаю тот же элемент, я получаю значение.

Это Адаптер 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)
        }

    }
}

}

Toполучить данные в Задании A:

val idMeja = intent.getStringExtra(MejaAdapter.ID_MEJA)

Когда щелкнул элемент:

private fun mejaItemClicked() {

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

Я не знаю, в чем проблема.Пожалуйста, помогите мне решить эту проблему

1 Ответ

0 голосов
/ 07 февраля 2019

1) В Activity onCreate (), это правильный режим для тестирования Bundle

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

2) Wend lanch намерение ПЕРВЫЙ, который вы добавили сверх намерения значение

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

3) Убедитесь, что тип передаваемой переменной согласован, и используйте «PUT» и «GET», соответствующие переменной.

4) Makeубедитесь, что действие еще не открыто, в противном случае метод onCreate () не будет вызван, и ваша getextra не будет повторно оценена.

...