【问题标题】:Spinner always null in Menu微调器在菜单中始终为空
【发布时间】:2017-05-11 15:23:03
【问题描述】:

所以我点击此链接将微调器添加到导航抽屉: How to add Spinner as an item in Navigation Drawer

这是我的代码:

@BindView(R.id.drawerLayout)
DrawerLayout mDrawerLayout;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.navigation_view)
NavigationView navigationView;
@BindView(R.id.navigation_filter_view)
NavigationView navigationFilterView;
Spinner citiesSpinner;
private ActionBarDrawerToggle mToggle;

private View navigationHeaderView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Iconify.with(new FontAwesomeModule());
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    initNavigationDrawer();
    toolbar.setTitle("");
    setSupportActionBar(toolbar);
    navigationHeaderView = LayoutInflater.from(this).inflate(R.layout.navigation_header, null);
    citiesSpinner = (Spinner) navigationFilterView.getMenu().findItem(R.id.city_spinner).getActionView();
    citiesSpinner.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, getResources().getStringArray(R.array.cities)));

}

city_spinner 布局:

<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/citiesSpinner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:gravity="center_vertical">
</Spinner>

navigationFilterView:

<android.support.design.widget.NavigationView
    android:id="@+id/navigation_filter_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="end"
    android:background="@color/colorAccent"
    app:menu="@menu/search_menu">
 </android.support.design.widget.NavigationView>

搜索菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/city_spinner"
    android:actionLayout="@layout/city_spinner"
    android:title="" />
</menu>

问题是 citySpinner 总是为空

尝试在空对象引用上调用虚拟方法“void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)”

【问题讨论】:

  • 为什么会有两个 NavigationView 字段?
  • 一个用于左侧导航视图,一个用于右侧

标签: android android-layout nullpointerexception


【解决方案1】:

您需要像这样更改您的代码..

   NavigationView navigationHeaderView = (NavigationView) findViewById(R.id.navigation_filter_view);
    View hView =  navigationHeaderView.getHeaderView(0);
    citiesSpinner = (Spinner) hView.findViewById(R.id.citiesSpinner);
    citiesSpinner.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, getResources().getStringArray(R.array.cities)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多