我真的是初学者,所以请耐心等待。
我有一个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,为其添加标签号,但它不起作用。还有其他建议吗?
答案 0 :(得分:0)
试试这可能会对你有所帮助
答案 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但不重要)(尽管如果您有其他具有接口的片段,您可以执行类似的操作)