3

我的操作栏上有一个微调器。它是一个菜单项(不是导航模式)。它在我从 spinnerNumber 调用方法的行上返回了一个 nullpointerexception。我认为我对 xml 做错了,或者我不应该在 OnCreateOptionMenu 上对其进行初始化(但我认为当菜单 xml 仍未膨胀时,在 OnCreate 上调用它也是不正确的)。

act_main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/numberSpinner"
    android:actionLayout="@layout/spin_number"
    android:showAsAction="always">
</item>
<item
    android:id="@+id/menu_settings"
    android:orderInCategory="100"
    android:showAsAction="ifRoom"
    android:title="@string/menu_settings">
</item>

spin_number.xml

   <Spinner xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="wrap_content"
android:layout_height="wrap_content" />

我的 SherlockFragmentActivity 中的方法:

public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.act_main, menu);

    spinnerNumber= (Spinner)findViewById(R.id.numberSpinner);


    mAdapter = new SimpleCursorAdapter(this,
            android.R.layout.simple_list_item_2, null,
            new String[] { MyContentProvider.Data.N_TITLE, MyContentProvider.Data.N_NUMBER, MyContentProvider.Data.N_ID },
            new int[] { android.R.id.text1, android.R.id.text2 },
            CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

    this.getSupportLoaderManager().initLoader(NUMBERS_LOADER, null, this);

    spinnerNumber.setAdapter(mAdapter);
    spinnerNumber.setOnItemSelectedListener(this);
    spinnerNumber.setSelection(setSpinPosition());

    return true;
}
4

1 回答 1

8

findViewbyId 将尝试从活动的 contentView 中查找 id。

代替

spinnerNumber= (Spinner)findViewById(R.id.numberSpinner);

尝试这个

MenuItem item = menu.findItem(R.id.numberSpinner);
spinnerNumber = (Spinner)item.getActionView()
于 2012-09-05T03:24:00.220 回答