如何阻止微调器自动选择一个选项?

时间:2013-05-15 11:00:58

标签: android spinner

我在app中有一个微调器,当它进入OnItemSelected它会自动选择第一个选项,我该如何以一种简单的方式停止它?

 spinner2.setOnItemSelectedListener(new OnItemSelectedListener(){


                        @Override
                        public void onItemSelected(AdapterView<?> parent,
                                View view,
                                int pos, long id) {

3 个答案:

答案 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,但我没有看到提供的细节。所以这是做什么的:

  1. 创建将在ActionBar中显示的视图,用户将单击该视图以查看菜单:

    View view = this.getLayoutInflater().inflate(R.layout.actionbar_view, null);
    
  2. 创建一个锚定到该视图的PopupMenu:

    PopupMenu popup = new PopupMenu(this, view);
    popup.getMenuInflater().inflate(R.menu.actionbar_menu, popup.getMenu());
    
  3. OnClickListener添加到显示PopupMenu的视图:

    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popup.show();
        }
    });
    
  4. 向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;
        }
    });
    
  5. 最后,使用以下命令在Activity中配置ActionBar:

    ActionBar ab = this.getActionBar();
    ab.setCustomView(view);
    ab.setDisplayShowCustomEnabled(true);
    ab.setDisplayShowTitleEnabled(false);
    
  6. 有一条评论认为,将主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 总是有一个选择。您的应用需要始终通过某种方式处理选择。