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