大家。我的bundle()函数有问题。假设我有片段A、B和C。我想将数据从片段A发送到片段C。我只想将数据从A发送到C并从页面A切换到页面B。
在页面上我写导航到日期操作。但当我运行它时,导航到 C 页面。为什么?
binding.nextdate.setOnClickListener { nextdateaction() sendbundle() }
'''
***package com.example.rebolutbank.features.account
import android.graphics.Color
import android.os.Bundle
import android.util.Patterns
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.text.isDigitsOnly
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.example.rebolutbank.R
import com.example.rebolutbank.databinding.FragmentSignUpBinding
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
import com.google.firebase.firestore.firestore
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class SignUpFragment : Fragment() {
private lateinit var binding: FragmentSignUpBinding
private val firestore = Firebase.firestore
val viewModel : SignUpViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentSignUpBinding.inflate(inflater)
binding.viewModel = viewModel
binding.lifecycleOwner = this
signUp()
binding.nextdate.setOnClickListener {
nextdateaction()
sendbundle()
}
return binding.root
}
private fun sendbundle(){
val username = binding.nameuser.text.toString()
val lastname = binding.lastnameuser.text.toString()
val country = binding.usercountry.text.toString()
val passCodeFragment = PassCodeFragment()
val bundle = Bundle().apply {
putString("username",username)
putString("lastname",lastname)
putString("usercountry",country)
}
passCodeFragment.arguments = bundle
}
private fun signUp(){
binding.nameuser.setOnFocusChangeListener{_,focused->
if(!focused){
binding.nameuserlayout.helperText = valid_name_lastname()
}
}
binding.lastnameuser.setOnFocusChangeListener{_, focused->
if(!focused){
binding.lastnameuserlayout.helperText = valid_name_lastname()
}
}
}
private fun nextdateaction(){
if (binding.nameuser.text.isNullOrEmpty()){
binding.anytxt2.text = "Add your Name"
binding.anytxt2.setTextColor(Color.RED)
}
else if (binding.lastnameuser.text.isNullOrEmpty()){
binding.anytxt2.text = "Add your Lastname"
binding.anytxt2.setTextColor(Color.RED)
}
else if(binding.usercountry.text.isNullOrEmpty()){
binding.anytxt2.text = "Add your Country"
binding.anytxt2.setTextColor(Color.RED)
}
else{
var action = SignUpFragmentDirections.actionSignUpFragmentToBirthDateFragment()
findNavController().navigate(action)
}
}
private fun valid_name_lastname() : String? {
val nameText = binding.nameuser.text.toString()
val lastnameText = binding.lastnameuser.text.toString()
fun isAlpha(input: String): Boolean {
return input.all { it.isLetter() }
}
if (!isAlpha(nameText) || !isAlpha(lastnameText)) {
return "Use only alpha"
}
// Function to check if a string consists only of alphabetic characters
return null
}
}***
'''
在
sendbundle
方法中,您正在实例化 Fragment 类,在正常情况下您不应该自己执行此操作。
您仅设置该实例的 arguments
属性。
考虑使用 androidx.navigation
和 navigation-safe-args-gradle-plugin
通过类型安全的原语参数从一个片段导航到另一个片段。设置导航图,并使用 NavController$navigate
方法生成适当的操作。