如何检查片段是否可见

时间:2015-08-18 13:45:39

标签: android android-fragments

我有一个包含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容器。

感谢

2 个答案:

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

    }

http://developer.android.com/reference/android/support/v4/app/Fragment.html#setUserVisibleHint%28boolean%29