我有一个选项卡式滚动活动,其中包含以下几个片段:
com.example.myapp
res ...布局
在 activity_tabbed.xml 中,我有一个FAB按钮:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:.../>
在 fragment_1.xml 中,我有一个EditText元素:
<EditText android:id="@+id/input_a_fragment_one"
android:.../>
在 fragment_2.xml 中,我有一个EditText元素:
<EditText android:id="@+id/input_b_fragment_two"
android:.../>
我想在按下fab按钮时将输入到两个片段EditText中的数据写入Firebase Realtime DB。
在 DB_Constructors.kt 中,我创建了以下类:
class SubmissionDetails(val line1_fragement1: String, line1_fragment2: String)
我在 TabbedActivity.kt 中进行了以下操作:
class TabbedActivity : AppCompatActivity() {
val ref = FirebaseDatabase.getInstance().getReference("userData")
lateinit var input_a_fragment_one: EditText
lateinit var input_b_fragment_two: EditText
lateinit var saveButton: Button
public val currentUser = FirebaseAuth.getInstance().currentUser
val fab: FloatingActionButton = findViewById(R.id.fab)
fab.setOnClickListener { view ->
Snackbar.make(view, "A message", Snackbar.LENGTH_LONG
.setAction("Action", null).show()
saveAccount()
}
}
fun saveAccount(){
val userId = currentUser?.uid ?: return
val submissionDetails = SubmissionDetailsPrep(inputA, inputB)
ref.child(userId).setValue(submissionDetails).addOnCompleteListener{
//On Complete Activities...
}
}
在 1Fragment.kt 中,我有以下内容:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val inputA = input_a_fragment_one.text.toString().trim()
}
在 2Fragment.kt 中,我有以下内容:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val inputB = input_b_fragment_two.text.toString().trim()
}
我知道某些元素的位置不正确,但无法找出原因?目前,主TabbedActivity文件中没有inputA和inputB。如何使它们可用?
答案 0 :(得分:0)
要检索input_a_fragment_one
input_b_fragment_two
中TabbedActivity
和Activity
的文本内容,请执行以下操作之一:
Activity
实现。当相关Fragment
中的文本更改时,请调用回调以更新Activity
中的状态变量。Fragment
方法或在初始化期间保存findFragmentBy*
的实例来检索对相关Fragment
的引用。然后,您可以直接与Fragment
进行交互以检索所需的文本。存在其他方法,但是这两个选项之一足以满足您的目的。