首页 > 解决方案 > 在片段到片段的通信中显示正确的值

问题描述

我正在 Android Studio 中构建一个带有两个片段的计算器。一个用于显示,一个用于按钮。当我尝试将数据发送到视图片段时,就会出现问题。按钮单击,但视图仅显示一些奇怪的十六进制信息,例如带有片段名称的信息,然后没有其他内容,但单击时仍然可以听到按钮。什么会导致这个?可能是视图绑定还是片段的设置方式?

class MainActivity : AppCompatActivity(), FragmentDataCouple {

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)



}

override fun dataCommunicator(editTextInput: String) {

    val bundle = Bundle()
    bundle.putString("results", editTextInput)
    val transaction = supportFragmentManager.beginTransaction()
    val upperFragment = DisplayFragment()
    upperFragment.arguments = intent.extras
    upperFragment.arguments = bundle
    transaction.add(R.id.topFragment, upperFragment).commit()
}

键盘片段中的代码

class KeyboardFragment : Fragment(R.layout.fragment_keyboard) {

        private var _binding: FragmentKeyboardBinding? = null
        private val binding get() = _binding!!
        private lateinit var fragmentCouple: FragmentDataCouple

        override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?,
        ): View? {
            // Inflate the layout for this fragment
            _binding = FragmentKeyboardBinding.inflate(inflater, container, false)
            val view = binding.root
            fragmentCouple = activity as FragmentDataCouple

            //On click listeners for numbers
            binding.btnZero.setOnClickListener { numberClicked() }
            binding.btnOne.setOnClickListener { numberClicked() }
            binding.btnTwo.setOnClickListener { numberClicked() }
            binding.btnThree.setOnClickListener { numberClicked() }
            binding.btnFour.setOnClickListener { numberClicked() }
            binding.btnFive.setOnClickListener { numberClicked() }
            binding.btnSix.setOnClickListener { numberClicked() }
            binding.btnSeven.setOnClickListener { numberClicked() }
            binding.btnEight.setOnClickListener { numberClicked() }
            binding.btnNine.setOnClickListener { numberClicked() }
            
 fun numberClicked() {


     var btnClick = toString()

    when (view) {

        binding.btnZero ->{
            btnClick += "0"
        }
        binding.btnOne -> {
            btnClick += "1"
        }
        binding.btnTwo -> {
            btnClick += "2"
        }
        binding.btnThree -> {
            btnClick += "3"
        }
        binding.btnFour -> {
            btnClick += "4"
        }
        binding.btnFive -> {
            btnClick += "5"
        }
        binding.btnSix -> {
            btnClick += "6"
        }
        binding.btnSeven -> {
            btnClick += "7"
        }
        binding.btnEight -> {
            btnClick += "8"
        }
        binding.btnNine -> {
            btnClick += "9"
        }
        binding.posNeg ->{
            btnClick = "-$btnClick"
        }
    }
    fragmentCouple.dataCommunicator(btnClick)
}

显示片段代码

private var _binding: FragmentDisplayBinding? = null
private val binding get() = _binding!!
private lateinit var fragmentCouple: FragmentDataCouple
private var displayMath: String? = ""


override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    _binding = FragmentDisplayBinding.inflate(inflater, container, false)
    val view = binding.root
    fragmentCouple = activity as FragmentDataCouple

    displayMath = arguments?.getString("results")
    binding.displayView.text = displayMath
    return view
}

标签: android-studiokotlinandroid-layoutandroid-fragments

解决方案


推荐阅读