Я знаю, что этот вопрос задавали слишком много раз, но ни один из них не работает для меня. Я пытаюсь передать ввод в EditText из Fragment1 в TextView во Fragment2, используя интерфейс, и оба разделяют одно действие, но я застрял в нем уже больше суток. Проблема в том, что аргумент, который я отправляю из MainActivity, всегда равен нулю.
Это мой интерфейс:
interface SendData {
fun sendData(name: String)
}
И Fragment1.kt:
class Fragment1 : Fragment() {
private lateinit var communicator: SendData
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val rootView = inflater.inflate(R.layout.fragment1_layout, container, false)
communicator = activity as SendData
rootView.btn_send.setOnClickListener {
communicator.sendData(rootView.name_ET.text.toString())
}
return rootView
}
}
Fragment2.kt
class Fragment2 : Fragment() {
var receivedName: String? = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
receivedName = arguments?.getString("NAME")
Log.d("Fragment2", "Receiving: ${arguments.toString()}")
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val rootView = inflater.inflate(R.layout.fragment2_layout, container, false)
rootView.receivedName_TV.text = receivedName
return rootView
}
}
И MainActivity.kt
class MainActivity : AppCompatActivity(), SendData {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
supportFragmentManager.beginTransaction().replace(R.id.fragment_container, Fragment1())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit()
}
override fun sendData(name: String) {
Fragment2().apply {
arguments = Bundle().apply {
putString("NAME", name)
}
Log.d("Fragment1", "Sending: ${arguments.toString()}")
}
supportFragmentManager.beginTransaction().replace(R.id.fragment_container, Fragment2())
.addToBackStack("Fragment2").setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit()
}
}
Я использую ресурс , и я даже сравнил свой код с их строкой линии, и я не вижу, что делаю не так. Заранее спасибо за помощь.