微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spinner:当 ui(spinner) 包含在主 xml 文件中时,阵列适配器不起作用

如何解决Spinner:当 ui(spinner) 包含在主 xml 文件中时,阵列适配器不起作用

我有一个带有微调器的用户界面和一些使用 Arraydapter 作为自定义字符串数组的项目。

如果在 activity_main 中添加了微调项,则一切正常。

但是如果我在单独的布局中添加微调器并将其包含在 activity_main 中,则相同的代码不会填充微调器。

我使用 LayoutInflater 对视图进行了膨胀,并且在日志中没有发现异常。

谁能告诉我如何将 Arrayadapter 添加到 Spinner 从 Java 类到添加的 UI。

我尝试并测试过。

工作代码

MainActivity.java

        package com.abhiroop.simplespinnerappcustom;

   public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

// array of Strings
String[] courses = {"C","Data structures","Interview prep","Algorithms","DSA with java","OS"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Spinner spino = findViewById(R.id.coursesspinner);
    spino.setonItemSelectedListener(this);

    ArrayAdapter ad
            = new ArrayAdapter(
            this,android.R.layout.simple_spinner_item,courses);

    ad.setDropDownViewResource(
            android.R.layout
                    .simple_spinner_dropdown_item);
    spino.setAdapter(ad);
}


@Override
public void onItemSelected(AdapterView<?> adapterView,View view,int i,long l) {

}

@Override
public void onnothingSelected(AdapterView<?> adapterView) {

}

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<!--Constraint layout which contain Spinner widget-->
 <androidx.constraintlayout.widget.ConstraintLayout
    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/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<!--Spinner widget-->
<Spinner
    android:id="@+id/coursesspinner"
    android:layout_height="50dp"
    android:layout_width="160dp"
    android:layout_marginEnd="10dp"
    android:layout_marginStart="10dp"
    android:layout_marginBottom="10dp"
    android:layout_marginTop="10dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"/>


</androidx.constraintlayout.widget.ConstraintLayout>

没有工作代码

MainActivity.java '''包com.abhiroop.simplespinnerappcustom;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

String[] courses = { "C","OS" };

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

     View mainView = LayoutInflater.from(this).inflate(R.layout.activity_main,null);
    View view = LayoutInflater.from(this).inflate(R.layout.spinner_layout,(ViewGroup) mainView,true);
    Spinner spino = view.findViewById(R.id.coursesspinner);
    spino.setonItemSelectedListener(this);

    
    ArrayAdapter ad
            = new ArrayAdapter(
            this,courses);

    ad.setDropDownViewResource(
            android.R.layout
                    .simple_spinner_dropdown_item);

    spino.setAdapter(ad);
}
@Override
public void onItemSelected(AdapterView<?> adapterView,long l) {

}

@Override
public void onnothingSelected(AdapterView<?> adapterView) {

}

} '''

activity_main.xml '''

<?xml version="1.0" encoding="utf-8"?>
    <!--Constraint layout which contain Spinner widget-->
        <androidx.constraintlayout.widget.ConstraintLayout
        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/main"
        android:layout_width="match_parent"
android:layout_height="match_parent">

<!--Spinner widget-->
<!--<Spinner
    android:id="@+id/coursesspinner"
    android:layout_height="50dp"
    android:layout_width="160dp"
    android:layout_marginEnd="10dp"
    android:layout_marginStart="10dp"
    android:layout_marginBottom="10dp"
    android:layout_marginTop="10dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"/>-->

<include
    android:id="@+id/spinner_layout"
    layout="@layout/spinner_layout"/>

'''

spinner_layout.xml

<?xml version="1.0" encoding="utf-8"?>
    <Spinner 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/coursesspinner"
    android:layout_width="160dp"
    android:layout_height="50dp"
    android:layout_marginStart="10dp"
    android:layout_marginTop="10dp"
    android:layout_marginEnd="10dp"
    android:layout_marginBottom="10dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

解决方法

尝试更改无效代码 spinner_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<!--Spinner widget-->
<Spinner
    android:id="@+id/coursesspinner"
    android:layout_height="50dp"
    android:layout_width="160dp"
    android:layout_marginEnd="10dp"
    android:layout_marginStart="10dp"
    android:layout_marginBottom="10dp"
    android:layout_marginTop="10dp"
    />
</LinearLayout>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。