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

时间:2015-10-07 06:25:13

标签: android android-layout android-fragments android-viewpager

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

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

我在onCreate()中为TabsActivity调用此方法,并在setMenuVisibility()中将其称为4个片段

private void setUpCustomActionBar(Activity activity){

    ViewGroup actionBarLayout = (ViewGroup) activity.getLayoutInflater().inflate(R.layout.actionbar_custom, null);

    RelativeLayout menupin = (RelativeLayout) actionBarLayout.findViewById(R.id.rl_menu_map);
    RelativeLayout menufilter = (RelativeLayout) actionBarLayout.findViewById(R.id.rl_menu_filter);

    ActionBar actionBar = activity.getActionBar();

    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(false);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setCustomView(actionBarLayout);

        menufilter.setVisibility(View.GONE);
        menupin.setVisibility(View.GONE);
    }
}

对于片段我称之为:

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

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

actionbar_custom.xml

<?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>

我有两个问题:

  1. 我必须在每个片段中复制并重复此方法。有没有办法避免重复代码?
  2. 在第二个片段中,我将menupin设置为仅可见。在第3个片段中,我将menufilter设置为仅可见。在第1和第4个片段中,没有布局应该是可见的但是当我加载TabsActivity时我仍然可以在fragment1上看到menufilter布局。我可以通过转到fragment2并切换到fragment1来使其消失。似乎在加载活动时没有为第一个默认片段调用setMenuVisiblity()

1 个答案:

答案 0 :(得分:-1)

  1. 您可以创建类BaseFragment(并在此处编写setMenuVisibility) - &gt;然后4个片段将从这个类扩展。

  2. 创建片段时,它不会调用setMenuVisibility方法。只有当viewPager更改片段时(当我们滚动viewPager时),它才会调用setMenuVisibility。首先,操作栏显示为完整视图。所以,在第一次,从活动开始,我调用第一个片段来隐藏操作栏上的那些视图并且它可以工作。