gpt4 book ai didi

android - 将数据从嵌套 fragment 发送到父 fragment

转载 作者:IT王子 更新时间:2023-10-28 23:53:39 25 4
gpt4 key购买 nike

我有一个 Fragment FR1 包含几个 Nested Fragments; FRaFRbFRc。这些 Nested Fragments 通过在 FR1 的布局上按 Buttons 进行更改。每个 Nested Fragments 中都有几个输入字段;其中包括 EditTextsNumberPickersSpinner 等内容。当我的用户完成并填写 Nested Fragments 的所有值时,FR1(父 fragment )有一个提交按钮。

那么我怎样才能从我的 Nested Fragments 中检索我的值并将它们带入 FR1

  1. 所有 Views 都在每个 Nested Fragment 中声明和编程处理。
  2. FragmentFR1处理Nested Fragments的事务。

我希望这个问题足够清楚,我不确定是否需要发布代码,但如果有人觉得我可以这样做。

编辑 1:

这是我添加 Nested Fragments 的方法:

tempRangeButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

getChildFragmentManager().beginTransaction()
.add(R.id.settings_fragment_tertiary_nest, tempFrag)
.commit();

}
});

scheduleButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

getChildFragmentManager().beginTransaction()
.add(R.id.settings_fragment_tertiary_nest, scheduleFrag)
.commit();
}
});

alertsButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

getChildFragmentManager().beginTransaction()
.add(R.id.settings_fragment_tertiary_nest, alertsFrag)
.commit();

}
});

submitProfile.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
constructNewProfile();
}
});

我的 constructNewProfile() 方法需要我的 Nested Fragments 中的值。

public Fragment tempFrag = fragment_profile_settings_temperature
.newInstance();
public Fragment scheduleFrag= fragment_profile_settings_schedules
.newInstance();
public Fragment alertsFrag = fragment_profile_settings_alerts
.newInstance();

以上是指父Fragment的字段;以及它们最初是如何实例化的。

最佳答案

最好的方法是使用接口(interface):

  1. 在嵌套 fragment 中声明一个接口(interface)

    // Container Activity or Fragment must implement this interface
    public interface OnPlayerSelectionSetListener
    {
    public void onPlayerSelectionSet(List<Player> players_ist);
    }
  2. 将接口(interface)附加到父 fragment

    // In the child fragment.
    public void onAttachToParentFragment(Fragment fragment)
    {
    try
    {
    mOnPlayerSelectionSetListener = (OnPlayerSelectionSetListener)fragment;

    }
    catch (ClassCastException e)
    {
    throw new ClassCastException(
    fragment.toString() + " must implement OnPlayerSelectionSetListener");
    }
    }


    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    Log.i(TAG, "onCreate");
    super.onCreate(savedInstanceState);

    onAttachToParentFragment(getParentFragment());

    // ...
    }
  3. 在按钮点击时调用监听器。

    // In the child fragment.
    @Override
    public void onClick(View v)
    {
    switch (v.getId())
    {
    case R.id.tv_submit:
    if (mOnPlayerSelectionSetListener != null)
    {
    mOnPlayerSelectionSetListener.onPlayerSelectionSet(selectedPlayers);
    }
    break;
    }
    }
  4. 让你的父 fragment 实现接口(interface)。

     public class Fragment_Parent extends Fragment implements Nested_Fragment.OnPlayerSelectionSetListener
    {
    // ...
    @Override
    public void onPlayerSelectionSet(final List<Player> players_list)
    {
    FragmentManager fragmentManager = getChildFragmentManager();
    SomeOtherNestFrag someOtherNestFrag = (SomeOtherNestFrag)fragmentManager.findFragmentByTag("Some fragment tag");
    //Tag of your fragment which you should use when you add

    if(someOtherNestFrag != null)
    {
    // your some other frag need to provide some data back based on views.
    SomeData somedata = someOtherNestFrag.getSomeData();
    // it can be a string, or int, or some custom java object.
    }
    }
    }

在进行 fragment 交易时添加标签,以便您可以在之后查找它以调用其方法。 FragmentTransaction

这是处理 fragment 和嵌套 fragment 之间通信的正确方法,对于 Activity 和 fragment 几乎相同。 http://developer.android.com/guide/components/fragments.html#EventCallbacks

其实官方还有另外一种方式,就是使用activity result,不过这个已经够用了,也很常用。

关于android - 将数据从嵌套 fragment 发送到父 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23142956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com