如何在同一活动中从一个片段向另一个片段发送字符串URL。
答案 0 :(得分:1)
一种流行的选择是将数据存储在ViewModel中,该数据可以由多个活动/片段共享。
从文档中:
此方法具有以下优点:
- 该活动无需执行任何操作或对此一无所知 通讯。
- 片段不需要彼此了解 SharedViewModel合同。如果其中一个片段消失了, 另一个人照常工作。
- 每个片段都有其自己的生命周期,并且不受另一个片段的生命周期影响。如果一个片段 替换另一个,UI可以继续正常工作。
在文档中也可以找到一个很好的例子:
class SharedViewModel : ViewModel() {
val selected = MutableLiveData<Item>()
fun select(item: Item) {
selected.value = item
}
}
class MasterFragment : Fragment() {
private lateinit var itemSelector: Selector
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this).get(SharedViewModel::class.java)
} ?: throw Exception("Invalid Activity")
itemSelector.setOnClickListener { item ->
// Update the UI
}
}
}
class DetailFragment : Fragment() {
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this).get(SharedViewModel::class.java)
} ?: throw Exception("Invalid Activity")
model.selected.observe(this, Observer<Item> { item ->
// Update the UI
})
}
}
答案 1 :(得分:0)
您有多种方法可以做到这一点。
在下面,我列出了3种选择来做您想做的事情:
答案 2 :(得分:0)
要传递给片段的数据(根据您的问题,应传递int的字符串instad):
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);
获取将参数发送到片段所需的信息。
Bundle bundle = this.getArguments();
if (bundle != null) {
int i = bundle.getInt(key, defaulValue);
}
(*在这里找到此答案:Android: Pass data(extras) to a fragment)
答案 3 :(得分:0)
您可以创建共享的ViewModel
对象,片段将通过观察 LiveData
进行通信。