Android:如何将数据从父片段发送到子片段

HaH*_*gry 8 android android-fragments

所以我已经查看了其他问题,但我无法提出解决方案.基本上,我有一个父片段和一个子片段,我需要将一个整数传递给子片段.子片段是在XML中定义的,所以据我所知,我无法附加一个包.看起来它应该很简单,但我无法弄明白.

任何有关如何做到这一点的帮助都会很棒.谢谢!

Sta*_*hin 8

简单的解决方案是在您的父片段onCreateView上获取子片段的引用

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    View view = inflater.inflate(R.layout.parent_fragment, container, false);
    YourChildFragment fragment = (YourChildFragment) getChildFragmentManager().findFragmentById(R.id.child_fragment_id);

    // pass your data
    fragment.setMyInt(42);

    return view;
}
Run Code Online (Sandbox Code Playgroud)


Bee*_*ena 6

你可以使用接口.在父片段中创建接口并创建它的对象和getter-setter方法.

interface YourListner{
    void methodToPassData(Object data);
}

static YourListner listnerObj;

public void setListnerObj(YourListner listnerObj) {
    this.listnerObj = listnerObj;
}
Run Code Online (Sandbox Code Playgroud)

在您的子片段中实现它.

然后,在父片段中添加以下代码.

ChilefragmentName yourfrag=((ChilefragmentName) getSupportFragmentManager().findFragmentById(R.id.fragmentId))
if(yourfrag !=null)
    {
        //Set listner
      yourfrag.setListnerObj((ChilefragmentName)yourfrag);

    }
if(listnerObj!=null)
    {
        //Pass your data
        listnerObj.methodToPassData(data);

    }
Run Code Online (Sandbox Code Playgroud)

您可以在子Fragmen中以已实现的方法处理该数据.