在Kotlin,Android

时间:2018-04-20 05:49:21

标签: android kotlin

我真的是初学者,所以请耐心等待。

我有一个4个标签应用,并为4个标签使用相同的片段。在所述片段(fragment_main.xml)中,我有一个editText,在main_activity.xml中有一个FAB。 fab只在editText中显示带有文本的toast。问题是我在哪个选项卡中无关紧要,它会随机显示来自另一个选项卡或有时相应文本的文本。

        fab.setOnClickListener {view ->
        var search: EditText = findViewById(R.id.search)

        Toast.makeText(this@MainActivity, search.text, Toast.LENGTH_SHORT).show()
    }

我是否必须为每个标签使用不同的片段?所有选项卡都是相同的:搜索字段,listView和FAB,它们将数据发送到数据库并清除所选标签。

我已经尝试更改editText id,为其添加标签号,但它不起作用。还有其他建议吗?

2 个答案:

答案 0 :(得分:0)

试试这可能会对你有所帮助

  1. 为4个标签创建四个片段类。
  2. 我假设您的前两个标签具有相同的视图。因此,您可以为两个选项卡重用相同的xml文件。

答案 1 :(得分:0)

我认为最简单的方法是从活动中调用显示片段文本的方法,因此当单击fab按钮时,它会调用片段方法来显示文本。这意味着,当您在选项卡之间进行选择时,活动将保留所选选项卡的引用。由于您只有一个片段,例如其布局具有编辑文本

的片段
class MyOnlyFragment : Fragment() {

  override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
  ): View? {
    val view = inflater.inflate(R.layout.fragment_all, container, false)
    return view
  }

  fun showText() {
    Toast.makeText(context, editText.text.toString(), Toast.LENGTH_SHORT).show()
  }

  companion object {
    fun getInstance(): MyOnlyFragment = MyOnlyFragment()
  }

}

现在,在您的活动中,您的活动将如下所示

class MainActivity : AppCompatActivity() {
  private lateinit var fragment: MyOnlyFragment

  private val mOnNavigationItemSelectedListener =
    BottomNavigationView.OnNavigationItemSelectedListener { item ->
      fragment = when (item.itemId) {
        R.id.navigation_home -> MyOnlyFragment.getInstance()
        R.id.navigation_dashboard -> MyOnlyFragment.getInstance()
        else -> MyOnlyFragment.getInstance()
      }
      val ft = supportFragmentManager.beginTransaction()
      ft.replace(R.id.frameContaienr, fragment)
      ft.commit()
      true
    }

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    fragment = MyOnlyFragment()
    val ft = supportFragmentManager.beginTransaction()
    ft.replace(R.id.frameContaienr, fragment)
    ft.commit()
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    floatingActionButton.setOnClickListener {
      fragment.showText()
    }

  }

}

那么fab所做的就是基本上调用片段的showText方法。此示例假定您只想在活动中为所有选项卡使用一个片段(在此示例中为3但不重要)(尽管如果您有其他具有接口的片段,您可以执行类似的操作)