通过主活动FAB按钮onClickListener

时间:2019-08-05 19:01:25

标签: android firebase firebase-realtime-database kotlin

我有一个选项卡式滚动活动,其中包含以下几个片段:

  • com.example.myapp

    • ui.main
      • 1Fragment.kt
      • 2Fragment.kt
    • TabbedActivity.kt
    • DB_Constructors.kt
  • res ...布局

    • activity_tabbed.xml
    • fragment_1.xml
    • fragment_2.xml

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。如何使它们可用?

1 个答案:

答案 0 :(得分:0)

要检索input_a_fragment_one input_b_fragment_twoTabbedActivityActivity的文本内容,请执行以下操作之一:

  • 定义一个侦听器回调接口,然后由您的Activity实现。当相关Fragment中的文本更改时,请调用回调以更新Activity中的状态变量。
  • 通过使用Fragment方法或在初始化期间保存findFragmentBy*的实例来检索对相关Fragment的引用。然后,您可以直接与Fragment进行交互以检索所需的文本。

存在其他方法,但是这两个选项之一足以满足您的目的。