在选项卡式活动中启用和禁用搜索操作

时间:2015-06-05 23:49:26

标签: java android

我有一个带有两个标签的标签式活动,当我在第二个标签时,我希望在操作栏中显示搜索操作。我不希望它显示在第一个标签中,只显示第二个标签。

这就是我的LaunchActivity.java

public class LaunchActivity extends ActionBarActivity {

    ViewPager pager;
    int Numboftabs = 2;
    boolean searchDisabled = false;

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        ...

        pager = (ViewPager) findViewById(R.id.pager);
        pager.setAdapter(adapter);

        pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                if (position == 0) {
                    searchDisabled = true;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    ...

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_launch, menu);
    return super.onCreateOptionsMenu(
    }

    ...

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem search = menu.findItem(R.id.action_search);

    if(searchDisabled) {
        search.setEnabled(false);
    }
    super.onPrepareOptionsMenu(menu);
    return true;
    }
}

menu_launch.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".LaunchActivity">

    <item android:id="@+id/action_search"
        android:title="@string/action_search"
        android:icon="@drawable/ic_action_search"
        app:showAsAction="ifRoom" />

    <item android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:orderInCategory="100"
        app:showAsAction="never" />

</menu>

有谁知道为什么这不起作用?搜索操作会显示,但在第一个选项卡上不会隐藏。

1 个答案:

答案 0 :(得分:2)

  1. 方法:
  2. 您可以通过为MenuItem添加类变量来解决此问题。

    MenuItem search;
    

    然后在onPrepareOptionsMenu中只对其进行初始化:

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        search = menu.findItem(R.id.action_search);
        super.onPrepareOptionsMenu(menu);
        return true;
    }
    

    然后在onPageChangeListener中执行此操作以显示/隐藏搜索项:

    @Override
    public void onPageSelected(int position) {
        if (position == 0) {
            search.setEnabled(false);
            search.setVisible(false);
        } else {
            search.setEnabled(true);
            search.setVisible(true);
        }
    }
    

    那应该达到你想要的目的。

    1. 方法:
    2. 备选更好的解决方案是在片段中设置选项菜单:

      hasOptionsMenu(true)添加到您的片段中:

      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setHasOptionsMenu(true);
      }
      

      并在onCreateOptionsMenu(也在片段中)设置可见性:

      @Override
      public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
          MenuItem search = menu.findItem(R.id.action_search);
          search.setEnabled(false);
          search.setVisible(false);
          super.onCreateOptionsMenu(menu, inflater);
      }