我在app中有一个微调器,当它进入OnItemSelected它会自动选择第一个选项,我该如何以一种简单的方式停止它?
spinner2.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent,
View view,
int pos, long id) {
答案 0 :(得分:2)
在SO和其他地方多次询问过这个问题。例如:
onNavigationItemSelected in ActionBar is being called at startup how can avoid it?
Infinite loop when using onNavigationItemSelected and invalidateOptionsMenu
Activity loop using onNavigationItemSelected on an ActionBar
一些答案和评论建议忽略(某些)回调。这可以用于非常简单的用途,但它忽略了这样一个事实:大多数人都在问这个问题是否需要菜单而不是标准ActionBar在列表模式下提供的基于微调器的选项卡式导航。一些评论建议使用PopupMenu,但我没有看到提供的细节。所以这是做什么的:
创建将在ActionBar中显示的视图,用户将单击该视图以查看菜单:
View view = this.getLayoutInflater().inflate(R.layout.actionbar_view, null);
创建一个锚定到该视图的PopupMenu:
PopupMenu popup = new PopupMenu(this, view);
popup.getMenuInflater().inflate(R.menu.actionbar_menu, popup.getMenu());
将OnClickListener
添加到显示PopupMenu的视图:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popup.show();
}
});
向PopupMenu添加OnMenuItemClickListener
以在用户从菜单中选择时接收通知:
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
});
最后,使用以下命令在Activity中配置ActionBar:
ActionBar ab = this.getActionBar();
ab.setCustomView(view);
ab.setDisplayShowCustomEnabled(true);
ab.setDisplayShowTitleEnabled(false);
有一条评论认为,将主View设置为与默认ActionBar匹配可能有点棘手。尝试调查以下样式资源:
@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title
@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title.Inverse
@android:style/TextAppearance.Holo.Widget.ActionBar.Title
@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse
否则你至少需要正确的颜色和文字大小。视图本身显然应该fill_parent
并且center_vertical
重力。
'努夫说。
答案 1 :(得分:1)
您可以使用布尔变量来检查它是否是第一次,不执行代码。 第二次执行代码,否则这是默认行为。
答案 2 :(得分:0)
如何以简单的方式阻止它?
你没有。除非适配器为空且无法进行选择,否则Spinner
总是有一个选择。您的应用需要始终通过某种方式处理选择。