Nexus 7微调器在动作栏中的bug

时间:2013-06-27 09:54:26

标签: android android-actionbar android-spinner

我在Nexus 7平板电脑上运行我的应用程序时出现问题,而在其他设备上运行时甚至连接到nexus 4。

我试图把一个微调器填充来自JSON响应的元素(我通过Asynctask从服务器得到这个响应)并且除了在Nexus 7上之外它们都运行得非常好,因为应用程序刚启动时(可能在微调器上设置适配器时) ,遗憾的是我无法在Nexus 7上调试应用程序,因为我无法访问管理员帐户。在Nexus 4上调试相同的问题时,我发现我的微调器在动作栏中找不到findById()方法,因为你在Galaxy S2上使用相同的代码并将菜单项更改为:

<item
    android:id="@+id/menuCategory"
    android:actionLayout="@layout/action_categories"
    android:actionViewClass="android.widget.Spinner"
    android:showAsAction="always"
    android:title="@string/collection"/>

<?xml version="1.0" encoding="utf-8"?>
<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menuCategorySpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

它开始使用Nexus 4,但仍然在Nexus 7上运行。我认为代码的相关部分是:

//First do this to initialise elements of the menu
invalidateOptionsMenu();
//Find the spinner by id
spinner = (Spinner) findViewById(R.id.menuCategorySpinner);
//Initilise adapter
final ArrayAdapter<Category> Adapter = new ArrayAdapter<Category>(this, android.R.layout.simple_dropdown_item_1line, result);
//Set adapter
spinner.setAdapter(Adapter);

我认为问题出现在最后一行,因为如果早先没有找到id,但是我不知道为什么它只能在Nexus 7上找到,有什么人都知道可能会发生什么?

1 个答案:

答案 0 :(得分:0)

我认为我找到了一个解决方案,但仍然讨厌在不同的Android版本的设备上存在这样的差异(Galaxy S2使用4.1.2而Nexus设备是4.2.2)。我甚至考虑将此报告为Android平台上的错误,但是必须检查它是否有效作为错误报告。总而言之,对于那些需要它的人来说,这是一个答案: 在你的onCreateOptionsMenu中只需添加:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.full, menu);
            //getActionView() get a view for the given action
    spinner = (Spinner) menu.findItem(R.id.menuCategory).getActionView();
    return super.onCreateOptionsMenu(menu);
}

getActionView()是非常合乎逻辑的重要部分,但我没有得到的是为什么在其他平台上spinner =(Spinner)menu.findItem(R.id.menuCategory);如果有人遇到这个问题并且可以解释那部分,请写一个评论