You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:09:04