Android:如何将字符串数据从一个片段发送到同一主要活动的另一个片段?

时间:2018-11-06 20:35:56

标签: android android-studio android-fragments android-intent

如何在同一活动中从一个片段向另一个片段发送字符串URL。

4 个答案:

答案 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种选择来做您想做的事情:

  • 您可以使用总线在片段之间进行通信。为此,您可以使用一个名为Eventbus(https://github.com/greenrobot/EventBus)的库,也可以使用RxJava实现该库。
  • 片段之间进行通信的另一种方式,您可以在片段可以访问的活动中共享一个对象。
  • 最后,您可以在您的范围之间实现事件分配器的共享。

答案 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进行通信。

这是basic example of LiveData and ViewModel,您还可以在here

中找到更多信息。