访问项目并将其添加到Spinner

时间:2019-05-23 13:39:09

标签: android

我在菜单中添加了一个微调器,我想向该微调器动态添加项目。但是问题是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>

1 个答案:

答案 0 :(得分:1)

微调器在布局中有多深无关紧要。如果您在正确的视图层次结构中调用findViewById(),它将为您提供Spinner的实例。一旦获得微调器的实例,您只需要为适配器设置项即可。如果要动态添加项目,只需将新项目添加到用于适配器的任何数据结构中即可。之后,在适配器上调用notifyDataSetChanged()