簡體   English   中英

添加和刪​​除片段后,不會調用onCreateOptionsMenu

[英]onCreateOptionsMenu is not called after a fragment add & remove

我有一個片段,可以在其中調用ActivityCompat.invalidateOptionsMenu(getActivity()); 並且在活動和片段上都成功調用了onCreateOptionsMenu()方法。

但是,當我使用以下命令在片段頂部添加片段時:

transaction.add(R.id.fragment_home, fragment2, "fragment_ID");
transaction.addToBackStack(null);
transaction.commit();

然后關閉它(通過backPress或getSupportFragmentManager().popBackStack(); ), ActivityCompat.invalidateOptionsMenu(getActivity()); 變得反應遲鈍。 完全不調用onCreateOptionsMenu()

我肯定知道,如果我使用replace()而不是add() ,它將起作用,但是,由於某些原因,我需要使用add()

活動中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_home);
    if (fragment != null)
        fragment.onCreateOptionsMenu(menu, getMenuInflater());
    return true;
}

在片段1:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    Log.d(TAG, "onCreateOptionsMenu() called with: ...");
    // additional code
    super.onCreateOptionsMenu(menu, inflater);
}

請嘗試以下代碼:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_home);
    if (fragment != null) {
        fragment.onCreateOptionsMenu(menu, getMenuInflater());
        return true;
    }
    getMenuInflater().inflate(R.menu.menu_layout, menu);
    return super.onCreateOptionsMenu(menu);
}

暫無
暫無

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

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