2017-05-09 4 views
1

マイアプリには3つのタブがあり、タブ3のメニュー項目は異なります。 私がやったことは、活動の中でメニューアイテムを膨らませて、フラグメントmenuitems visibiltyが設定されていることです。アクションバーの検索ビューを非表示にする方法

アクティビティコード:

public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     getMenuInflater().inflate(R.menu.menu_home_page, menu); 
     return true; 
    } 

Menu_home_page.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item 
    android:id="@+id/menu_plan_your_day" 
    android:icon="@drawable/ic_settings_white_18dp" 
    android:title="@string/action_notify" 
    android:visible="false" 
    app:showAsAction="always" /> 
<item 
    android:id="@+id/menu_notification" 
    android:icon="@drawable/ic_notifications_white_18dp" 
    android:title="@string/action_notify" 
    android:visible="false" 
    app:showAsAction="always" /> 
<item 
    android:id="@+id/menu_search" 
    android:icon="@android:drawable/ic_menu_search" 
    android:title="@string/menu_search" 
    android:visible="false" 
    app:actionViewClass="android.support.v7.widget.SearchView" 
    app:showAsAction="always" /> 


</menu> 

Tab1を(フラグメントコード):

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 
public void onPrepareOptionsMenu(Menu menu) { 
     super.onPrepareOptionsMenu(menu); 
     getActivity().invalidateOptionsMenu(); 
} 

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     final MenuItem contactsSearchMenu = menu.findItem(R.id.menu_search); 
     final MenuItem planYourDayMenu = menu.findItem(R.id.menu_plan_your_day); 
     final MenuItem notificationMenu = menu.findItem(R.id.menu_notification); 
     contactsSearchMenu.setVisible(false); 
     planYourDayMenu.setVisible(true); 
     notificationMenu.setVisible(true); 

    } 

Tab1を

TAB3コードのような同じTAB2コード:

public void onPrepareOptionsMenu(Menu menu) { 
     super.onPrepareOptionsMenu(menu); 
     if (menu != null) { 
      final MenuItem contactsSearchMenu = menu.findItem(R.id.menu_search); 
      final MenuItem planYourDayMenu = menu.findItem(R.id.menu_plan_your_day); 
      final MenuItem notificationMenu = menu.findItem(R.id.menu_notification); 
      contactsSearchMenu.setVisible(true); 
      planYourDayMenu.setVisible(false); 
      notificationMenu.setVisible(false); 
     } 

    } 


@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 

    // Locate the search item 
    MenuItem searchItem = menu.findItem(R.id.menu_search); 


    // In version 3.0 and later, sets up and configures the ActionBar SearchView 
    if (Utils.hasHoneycomb()) { 

     // Retrieves the system search manager service 
     final SearchManager searchManager = 
       (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE); 
     final SearchView searchView = (SearchView) searchItem.getActionView(); 
     searchView.setSearchableInfo(
       searchManager.getSearchableInfo(getActivity().getComponentName())); 


     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String queryText) { 

       return true; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 

       String newFilter = !TextUtils.isEmpty(newText) ? newText : null; 
       if (mSearchTerm == null && newFilter == null) { 
        return true; 
       } 


       if (mSearchTerm != null && mSearchTerm.equals(newFilter)) { 
        return true; 
       } 

       mSearchTerm = newFilter; 

       mSearchQueryChanged = true; 
       getLoaderManager().restartLoader(
         ContactsQuery.QUERY_ID, null, ContactsListFragment.this); 
       return true; 
      } 
     }); 

     if (Utils.hasICS()) { 
      MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() { 
       @Override 
       public boolean onMenuItemActionExpand(MenuItem menuItem) { 

        return true; 
       } 

       @Override 
       public boolean onMenuItemActionCollapse(MenuItem menuItem) { 

        if (!TextUtils.isEmpty(mSearchTerm)) { 
         onSelectionCleared(); 
        } 
        mSearchTerm = null; 
        getLoaderManager().restartLoader(
          ContactsQuery.QUERY_ID, null, ContactsListFragment.this); 
        return true; 
       } 
      }); 

     } 

     if (mSearchTerm != null) { 
      final String savedSearchTerm = mSearchTerm; 

      if (Utils.hasICS()) { 
       searchItem.expandActionView(); 
      } 
      searchView.setQuery(savedSearchTerm, false); 
     } 
    } 
} 

活動のレイアウト:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 


    <android.support.design.widget.AppBarLayout 
     android:id="@+id/HomePageAppbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="@dimen/appbar_padding_top" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/AppTheme.PopupOverlay"></android.support.v7.widget.Toolbar> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/HomePageTab" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="top" 
      app:tabMode="fixed" /> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/HomePageViewPager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"></android.support.v4.view.ViewPager> 


</LinearLayout> 

しかし、問題はのみsearchviewメニュー項目は3つのすべてのタブの表示されています。 tab1とtab2のsearchviewメニュー項目を非表示にするにはどうすればいいですか?

+0

に変更があるたびに、ページの変更を監視し、invalidateOptionsメニューを呼び出すことができますか? –

+0

@IvanMilisavljevic 2つのタブのメニュー項目が同じで、3つ目のメニュー項目が異なるためです。 –

+0

同じコードが最新のアンドロイドライブラリで動作しています。私はこれが以前のリリースのバグだと思う。 –

答えて

0

これは難しいことではありません。 searchViewはビューであるため、クラスビューとsearchViewのプロパティと関数を使用できます。ここでドキュメント:https://developer.android.com/reference/android/view/View.html setVisibility関数を探します。

serachview自体ではなくメニュー項目を探している場合は、setVisible(false)をpublic void onPrepareOptionsMenu(メニューメニュー)に配置する必要があります。 funciton。

+0

contactsSearchMenu.setVisible(false);これはtab1とtab2に設定されます –

+0

この場合、この関数にコードを記述します:onPrepareOptionsMenu(メニューメニュー);それを行うと – mmelotti

+0

と同じ結果が –

0

あなたは、なぜあなたはフラグメントの中から、あなたのメニューを膨らまなかったViewPager

 @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
       @Override 
       public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

       } 

       @Override 
       public void onPageSelected(int position) { 
        invalidateOptionsMenu(); 
       } 

       @Override 
       public void onPageScrollStateChanged(int state) { 

       } 
      }); 
     } 


     @Override 
     public boolean onPrepareOptionsMenu(Menu menu) { 

      if (viewPager.getCurrentItem() == 1 || viewPager.getCurrentItem() == 2) { 
       contactsSearchMenu.setVisible(false); 
      } else { 
       contactsSearchMenu.setVisible(false); 
      } 

      return super.onPrepareOptionsMenu(menu); 
     } 
+0

viewpagerのフラグメントのタグを設定するには? –

+0

ViewPagerを使用していますか? –

+0

はい、私の活動レイアウトを見ることができます –

関連する問題