我搜索时会出现工具栏中的微调器 - Android Lollipop

时间:2014-11-07 21:07:11

标签: android android-fragments android-5.0-lollipop

我有一个抽屉导航,我在片段之间切换,在Fragment ONE中,我在工具栏中有一个微调器。在片段TWO中,我不想要微调器,所以我删除了微调器的属性" visibility = GONE"这很有效。

但是,在片段TWO中,执行以下步骤,确实发生了一些奇怪的事情

  1. 点按搜索图标
  2. 搜索视图显示在工具栏中
  3. 我点击取消
  4. 搜索视图崩溃,片段ONE中的微调器显示
  5. 我试图使用这个监听器" OnActionExpandListener"在搜索图标中,当用户点击取消时再次隐藏微调器,但它不起作用。

    任何想法?

    我设置工具栏的抽屉导航

    <android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
    
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
    
        <include layout="@layout/toolbar_dropdown"/>
    
        <!-- The main content view -->
        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />
    </LinearLayout>
    
        <!-- The navigation drawer -->
        <ListView android:id="@+id/left_drawer"
            android:fitsSystemWindows="true"
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:layout_marginTop="56dp"
            android:choiceMode="singleChoice"
            android:divider="@color/gray_light_divider_list_drawerNav"
            android:dividerHeight="1dp"
            android:background="@color/gray_light_background_list_drawerNav"
            />
    

    抽屉导航活动方法OnCreate,我在其中设置工具栏

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null) {
            setSupportActionBar(toolbar);
        }
    
        if(getSupportActionBar()!=null) {
            getSupportActionBar().setDisplayShowTitleEnabled(false);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setHomeButtonEnabled(true);
        }
    

    这是我在片段之间切换的方式

    android.support.v4.app.FragmentTransaction transaction =  fragmentManager.beginTransaction();
                transaction.replace(R.id.content_frame, fragment);
                transaction.addToBackStack(null);
                transaction.commit();
    

    使用onDrawerOpened方法中的ActionBarDrawerToggle,我删除了微调器,这意味着每次抽屉导航打开时我都删除了这个微调器

     Spinner spinner = (Spinner)findViewById(R.id.spinner_nav);
     spinner.setVisibility(View.GONE);
    

    这是Fragment TWO中的OnActionExpandListener

     MenuItemCompat.OnActionExpandListener searchOnActionExpandListener = new MenuItemCompat.OnActionExpandListener()
    {
        @Override
        public boolean onMenuItemActionExpand(MenuItem menuItem) {
    
            return true;
        }
    
        @Override
        public boolean onMenuItemActionCollapse(MenuItem menuItem) {
            Spinner spinner = (Spinner)findViewById(R.id.spinner_nav);
     spinner.setVisibility(View.GONE);
            return true;
        }
    };
    

1 个答案:

答案 0 :(得分:2)

要解决此问题,我执行了以下操作。

我删除了工具栏中的微调器,使其看起来像这样

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:background="?attr/colorPrimary">
</android.support.v7.widget.Toolbar>

我开始以编程方式在片段ONE中添加微调器

    Toolbar toolbar = (Toolbar)getActivity().findViewById(R.id.toolbar);
    if(toolbar.findViewWithTag("spinner_nav")==null) {
        Spinner spinner = new Spinner(getActivity());
        spinner.setTag("spinner_nav");

        //Setting up the adapter
        AdapterFragmentOne spinnerAdapter = new AdapterFragmentOne(getActivity(), array);
        spinnerAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);

        if (spinner != null) {
            spinner.setVisibility(View.VISIBLE);
            spinner.setAdapter(spinnerAdapter);
        }
        spinnerAdapter.notifyDataSetChanged();
        spinner.setOnItemSelectedListener(mOnNavigationListener);

        toolbar.addView(spinner);
    }

在我的抽屉导航活动中,我在抽屉打开时删除微调器,执行

    //Removing the spinner view
    Spinner spinner = (Spinner) toolbar.findViewWithTag("spinner_nav");
    toolbar.removeView(spinner);