问题描述
我有一个带有微调器的用户界面和一些使用 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>