簡體   English   中英

在Viewpager片段的自定義操作欄布局中顯示/隱藏按鈕

[英]Show/hide button in custom action bar layout for viewpager fragments

我的應用程序中有四個片段,我打算使用自定義操作欄。 這些片段中有兩個在操作欄上具有按鈕。 我有一個TabsActivity.class ,它具有一個加載四個片段的ViewPager

在我的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設置為僅可見。 在第三個片段中,我將menufilter設置為僅可見。 在第一個和第四個片段中,當我加載TabsActivity時,沒有布局應該是可見的,但是我仍然可以在fragment1上看到menufilter布局。 我可以通過轉到fragment2並切換到fragment1使其消失。 似乎在加載活動時未為第一個默認片段調用setMenuVisiblity()
  1. 您可以創建BaseFragment類(並在此處編寫setMenuVisibility)->然后從該類擴展4個片段。

  2. 創建片段時,它不會調用setMenuVisibility方法。 僅當viewPager更改片段時(當我們滾動viewPager時),它才調用setMenuVisibility。 首先,以完整視圖顯示操作欄。 因此,從活動開始,我第一次調用第一個Fragment來隱藏操作欄上的那些視圖,然后它起作用。

暫無
暫無

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

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