我有一个包含3个片段的布局。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<fragment android:name="com.carefreegroup.rr3.carefreeoncall.CarerAwayCarerListFragment"
android:id="@+id/carerlist"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/carerawaydatetimefragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
/>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/carerawayreasonlistfragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
/>
</LinearLayout>
当此布局加载时,左侧的第一个片段将自动加载。我有一个名为dateTime Fragment的Fragment,它基于第一个片段中的listview选项加载到中间片段中。 dateTime片段有一个optionsmenu,我想根据最右边的片段(reasonList Fragment)是否显示来隐藏其中一个选项。
我的问题是如何检查最右边的reasonList片段是否显示在中间DateTime片段的onPrepareOptionsMenu上。
我已经尝试了以下内容,但它返回true,因为布局中的片段容器就在那里。
@Override
public void onPrepareOptionsMenu(Menu menu) {
View reasonListView = getActivity().findViewById(R.id.carerawayreasonlistfragment_container);
if(reasonListView != null && reasonListView.getVisibility() == View.VISIBLE){
menu.getItem(5).setVisible(false);
}else{
menu.getItem(5).setVisible(true);
}
super.onPrepareOptionsMenu(menu);
}
我无法使用findFragmentByTag,因为当时视图中只有reasonList容器。
感谢
答案 0 :(得分:0)
[解决]
@Override
public void onPrepareOptionsMenu(Menu menu) {
CarerAwayReasonUpdatefragment reasonListView = (CarerAwayReasonUpdatefragment) getFragmentManager().findFragmentById(R.id.carerawayreasonlistfragment_container);
if(reasonListView == null ) {
menu.getItem(5).setVisible(true);
} else {
menu.getItem(5).setVisible(false);
}
super.onPrepareOptionsMenu(menu);
}
答案 1 :(得分:0)
您可以覆盖片段
中的 setUserVisibleHint @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
}