我在菜单中添加了一个微调器,我想向该微调器动态添加项目。但是问题是Spinner的布局非常深。
我具有导航的主要动作视图->包括主要动作视图并包含NavigationView-> NavigationView具有菜单->菜单包含项目->其中一个项目包含另一个菜单,并且该菜单的第一个项目是Spinner。 / p>
有没有更好的方法来添加下拉菜单?如果没有,如何访问微调器?
感谢您的帮助
代码:
MainActivity.kt:
class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener, AdapterView.OnItemSelectedListener{
private lateinit var activities: Spinner
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_with_nav)
activities = this.findViewById(R.id.menu_activity_select) //--- throws exception
activity_main_with_nav.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:openDrawer="start"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<include
layout="@layout/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_main"
app:menu="@menu/main_menu" />
</android.support.v4.widget.DrawerLayout>
main_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_activity"
android:title="@string/menu_activity">
<menu>
<item android:id="@+id/menu_activity_select"
android:title="@string/menu_activity_select"
app:actionViewClass="android.widget.Spinner"
/> <!-- this is the spinner I am looking for -->
<item android:id="@+id/menu_activity_activate_devices"
android:icon="@android:drawable/ic_dialog_dialer"
android:title="@string/menu_activity_activate_devices" />
<item android:id="@+id/menu_activity_camera"
android:icon="@android:drawable/ic_menu_camera"
android:title="@string/menu_activity_camera" />
</menu>
</item>
<group>
<item android:id="@+id/menu_scan_qr"
android:icon="@drawable/ic_codigo_qr"
android:title="@string/menu_scan_qr" />
<item android:id="@+id/menu_calendar"
android:icon="@android:drawable/ic_menu_month"
android:title="@string/menu_calendar" />
<item android:id="@+id/menu_settings"
android:icon="@android:drawable/ic_menu_manage"
android:title="@string/menu_settings" />
</group>
</menu>
答案 0 :(得分:1)
微调器在布局中有多深无关紧要。如果您在正确的视图层次结构中调用findViewById()
,它将为您提供Spinner的实例。一旦获得微调器的实例,您只需要为适配器设置项即可。如果要动态添加项目,只需将新项目添加到用于适配器的任何数据结构中即可。之后,在适配器上调用notifyDataSetChanged()
。