Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在选项卡式活动中启用和禁用搜索操作_Java_Android - Fatal编程技术网

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

Java 在选项卡式活动中启用和禁用搜索操作,java,android,Java,Android,我有一个带有两个选项卡的选项卡式活动,当我在第二个选项卡中时,我希望在操作栏中显示搜索操作。我不希望它显示在第一个选项卡中,只显示在第二个选项卡中 这是我的LaunchActivity.java的内容 public class LaunchActivity extends ActionBarActivity { ViewPager pager; int Numboftabs = 2; boolean searchDisabled = false; ...

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

这是我的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>

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

  • 方法:
  • 您可以通过为
    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);
        }
    }
    
    这应该实现你想要做的

  • 方法:
  • 另一个更好的解决方案是在片段中设置选项菜单:

    hasOptions菜单(true)
    添加到片段中:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }
    
    并在
    onCreateOptions菜单中设置可见性(也在片段中!):


    所以搜索项目仍然始终显示?可见性没有改变?我只是改变了OnPrepareOptions功能表中的第一行,这是否解决了问题?那么,我猜,
    onPageSelected
    不会被调用。你能通过调试来检查这一点吗?有另一种解决方案,你能添加你的
    onCreateOptions菜单和你的菜单xml吗?我用另一种方法编辑了我的文章。我希望这能解决你的问题。
    
    @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);
    }