簡體   English   中英

為什么findFragmentById總是返回null

[英]why does findFragmentById always returns null

我嘗試使用findFragmentById獲取片段,但是每次我在其位置獲得null時,我也嘗試使用findFragmentByTag並將標簽添加到我的添加事務中,但是這樣做也一樣。

以下代碼是修改后的空白起始模板(為簡單起見)

公共類MainActivity擴展了Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    setContentView(R.layout.activity_main);

    FragmentManager fragmentManager = getFragmentManager();

    if (savedInstanceState == null) {
        fragmentManager.beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager
            .findFragmentById(R.id.container);

    if (placeholderFragment == null) {
        Log.i("TAG", "placeholderFragment is null");
    } else {
        Log.i("TAG", "placeholderFragment is not null");
    }
}

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
        return rootView;
    }
}

}

我嘗試用add(R.id.container, new PlaceholderFragment(), "TAG")替換add,然后嘗試使用findFragmentByTag("TAG")訪問它,也沒有成功。

如何使我的代碼按預期工作?

我認為問題是您想在添加Fragment之后立即找到它。 在那短時間內,可能尚未添加Fragment

您可以做的就是在添加片段時已經有了該片段。

findFragmentById()函數通常用於在您已經添加了一段時間之后訪問其他函數中的Fragments

這是一個例子

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    setContentView(R.layout.activity_main);

    FragmentManager fragmentManager = getFragmentManager();
    PlaceholderFragment placeholderFragment = new PlaceholderFragment();

    if (savedInstanceState == null) {
        fragmentManager.beginTransaction()
                .add(R.id.container, placeholderFragment).commit();
    }
}

public void anotherFunc() {

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager
            .findFragmentById(R.id.container);
}

暫無
暫無

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

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