Kotlin Android 如何将Fragment下拉列表选中值传递到另一个Activity
实现方案
你之前的尝试逻辑错位了:不需要提前监听下拉框选中事件,点击预约按钮时直接读取三个下拉控件的当前选中值即可,具体修改如下:
第一步 修改CalendarFragment.kt的按钮点击逻辑
直接在bookADateButton的点击回调中读取三个下拉框的当前文本,封装到Intent中传递到确认页:
package com.example.mydoctor import ... class CalendarFragment : Fragment() { private lateinit var binding: FragmentCalendarBinding1 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setHasOptionsMenu(true) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = FragmentCalendarBinding1.inflate(layoutInflater) // 日期下拉适配 val itemsDates = resources.getStringArray(R.array.dates) val adapterDate = ArrayAdapter(requireContext(), list_dates, itemsDates) binding.autocompleteTextViewDateDropdown.setAdapter(adapterDate) // 时间下拉适配 val itemsTimes = resources.getStringArray(R.array.times) val adapterTime = ArrayAdapter(requireContext(), list_times, itemsTimes) binding.autocompleteTextViewTimeDropdown.setAdapter(adapterTime) // 补充你缺失的医生下拉适配,可根据你实际的控件ID调整 val itemsDoctors = resources.getStringArray(R.array.doctors) val adapterDoctor = ArrayAdapter(requireContext(), list_doctors, itemsDoctors) binding.autocompleteTextViewDoctorDropdown.setAdapter(adapterDoctor) binding.bookADateButton.setOnClickListener { // 直接读取三个下拉当前选中值 val selectedDate = binding.autocompleteTextViewDateDropdown.text.toString() val selectedTime = binding.autocompleteTextViewTimeDropdown.text.toString() val selectedDoctor = binding.autocompleteTextViewDoctorDropdown.text.toString() // 可选加非空校验,避免用户漏选 if (selectedDate.isEmpty() || selectedTime.isEmpty() || selectedDoctor.isEmpty()) { Toast.makeText(requireContext(), "请完善所有预约信息", Toast.LENGTH_SHORT).show() return@setOnClickListener } // 封装参数传递到确认页 val intent = Intent(requireContext(), ConfirmationActivity::class.java).apply { putExtra("SELECTED_DATE", selectedDate) putExtra("SELECTED_TIME", selectedTime) putExtra("SELECTED_DOCTOR", selectedDoctor) } startActivity(intent) } return binding.root } }
第二步 修改ConfirmationActivity.kt接收参数并展示
接收传递过来的三个参数,设置到确认页对应文本控件上即可,假设确认页的展示文本控件ID为tvConfirmation:
package com.example.mydoctor import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.TextView class ConfirmationActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_confirmation) // 接收参数 val selectedDate = intent.getStringExtra("SELECTED_DATE") ?: "" val selectedTime = intent.getStringExtra("SELECTED_TIME") ?: "" val selectedDoctor = intent.getStringExtra("SELECTED_DOCTOR") ?: "" // 拼接展示文本,可根据你的UI需求调整格式 val confirmText = "预约信息确认:\n出诊医生:$selectedDoctor\n预约日期:$selectedDate\n预约时间:$selectedTime" // 设置到确认页文本控件 findViewById<TextView>(R.id.tvConfirmation).text = confirmText Log.d("conf", "预约信息:$confirmText") } }
之前代码的问题说明
你把下拉框的OnItemClickListener设置逻辑放在了按钮点击回调中,只有点击按钮时才会给下拉框绑定选中监听,逻辑完全错位;且就算触发了选中回调,你定义的selectedValue是回调内部的局部变量,外部无法访问,自然拿不到选中值。
内容的提问来源于stack exchange,提问作者Dimitris Sidiropoulos
相关产品推荐
相关产品推荐

