簡體   English   中英

Android:如何將數據從父片段發送到子片段

[英]Android: How to send data from parent fragment to child fragment

所以我查看了其他問題,我一直無法提出解決方案。 所以基本上,我有一個父片段和一個子片段,我需要將一個整數傳遞給子片段。 子片段是在 XML 中定義的,因此據我所知,我無法附加包。 看起來它應該很簡單,但我一直無法弄清楚。

關於如何做到這一點的任何幫助都會很棒。 謝謝!

簡單的解決方案是在您的父片段 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;
}

您可以為此使用接口。 在父片段中創建接口並創建它的對象和 getter-setter 方法。

interface YourListner{
    void methodToPassData(Object data);
}

static YourListner listnerObj;

public void setListnerObj(YourListner listnerObj) {
    this.listnerObj = listnerObj;
}

在您的子片段中實現它。

然后,在父片段中添加以下代碼。

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);

    }

您可以在子片段中的已實現方法中處理該數據。

如果您有一些參數要傳遞給通過 XML 定義的片段,我認為更好和更簡單的選擇是動態添加它。 在這種情況下,您可以像這樣將兩個參數 param1 和 param2 傳遞給子片段:

public static YourFragment newInstance(String param1, String param2) {
        YourFragment fragment = new YourFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    public YourFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

newInstance() 方法將參數存儲在包的參數包中。 當 Android 重新創建片段時,它會很有用。 在這種情況下,將在onCreate()方法中檢索參數。

您可以使用參數將額外數據傳遞給片段。 此方法一般適用,不僅適用於 XML 參數。

...

ChildFragment cf = new ChildFragment();

Bundle b = new Bundle();
b.putInt("myInt", 0);

MyData data = new MyData();
b.putSerializable("myObject", data); // Pass entire objects

cf.setArguments(b);

...

transaction.commit();

您可以使用getArguments接口獲取數據

...
MyData data = (MyData) getArguments.getSerializable('myObject');
...

雖然嚴格來說它沒有回答問題,但在某些情況下,當我們實際上想要將相同的參數傳遞給子片段時,這也有效:

class ChildFragment extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle arguments = getArguments();
        if (arguments == null) {
            arguments = getParentFragment().getArguments();
        }
        if (arguments != null) {
            if (arguments.containsKey(Constants.EXTRA_FOO)) {
                // use it
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM