Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在自定义操作栏布局中显示/隐藏viewpager片段的按钮_Android_Android Layout_Android Fragments_Android Viewpager - Fatal编程技术网

Android 在自定义操作栏布局中显示/隐藏viewpager片段的按钮

Android 在自定义操作栏布局中显示/隐藏viewpager片段的按钮,android,android-layout,android-fragments,android-viewpager,Android,Android Layout,Android Fragments,Android Viewpager,我的应用程序中有四个片段,我打算使用一个自定义操作栏。其中两个片段在操作栏上有按钮。我有一个TabsActivity.class,它有一个加载四个片段的ViewPager 在我的TabsActivity和所有四个片段类中,我有一个方法setUpCustomActionBar,我调用它 我在onCreate中为TabsActivity调用此方法,在setMenuVisibility中为4个片段调用此方法 对于片段,我这样称呼它: @Override public void setMenuVisib

我的应用程序中有四个片段,我打算使用一个自定义操作栏。其中两个片段在操作栏上有按钮。我有一个TabsActivity.class,它有一个加载四个片段的ViewPager

在我的TabsActivity和所有四个片段类中,我有一个方法setUpCustomActionBar,我调用它

我在onCreate中为TabsActivity调用此方法,在setMenuVisibility中为4个片段调用此方法

对于片段,我这样称呼它:

@Override
public void setMenuVisibility(boolean menuVisible) {
   super.setMenuVisibility(menuVisible);

   if (menuVisible){
       if (getActivity() != null) {
           this.setUpCustomActionBar(this.getActivity());
       }
   }
}
actionbar_custom.xml

我有两个问题:

我必须在每个片段中复制和重复这个方法。有没有避免代码重复的方法? 在第二个片段中,我将menupin设置为仅可见。在第三个片段中,我将menufilter设置为仅可见。在第一个和第四个片段中,不应该看到任何布局,但是当我加载TabsActivity时,我仍然可以在片段1上看到menufilter布局。我可以通过转到fragment2并切换到fragment1使其消失。在加载活动时,似乎没有为第一个默认片段调用SetMenuVisibility。 您可以创建类BaseFragment并在此处写入setMenuVisibility->然后从该类扩展4个片段

创建片段时,它不调用setMenuVisibility方法。只有当我们滚动viewPager时viewPager更改片段时,它才会调用setMenuVisibility。首先,actionbar以全视图显示。因此,在第一次,从activity中,我调用第一个片段来隐藏actionbar上的那些视图,它就工作了


这真的不能回答2.对不起。我登录了,结果不一样。创建片段时,它不调用setMenuVisibility方法。只有当我们滚动viewPager时viewPager更改片段时,它才会调用setMenuVisibility。首先,actionbar以全视图显示。所以在第一次,从活动中,我调用第一个片段来隐藏actionbar上的那些视图,它成功了。
@Override
public void setMenuVisibility(boolean menuVisible) {
   super.setMenuVisibility(menuVisible);

   if (menuVisible){
       if (getActivity() != null) {
           this.setUpCustomActionBar(this.getActivity());
       }
   }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="4dp"
    android:paddingRight="4dp"
    android:background="@color/theme_light_blue">

  <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="center_vertical">

    <TextView
        android:id="@+id/it_regionname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Region_defined"
        android:textColor="@color/white"/>

    <ImageView
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:src="@drawable/faq_arrow_down" />

  </LinearLayout>

  <RelativeLayout
     android:id="@+id/rl_menu_map"
     android:layout_width="wrap_content"
     android:layout_height="match_parent"
     android:visibility="gone"
     android:gravity="center_vertical">

    <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/menu_icon_pin"
      android:layout_alignParentRight="true"/>

 </RelativeLayout>

 <RelativeLayout
     android:id="@+id/rl_menu_filter"
     android:layout_width="wrap_content"
     android:layout_height="match_parent"
     android:gravity="center_vertical"
     android:visibility="gone">

    <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:src="@drawable/menu_icon_filter"/>

 </RelativeLayout>
</LinearLayout>