我想创建带有材质设计风格的微调器。我的问题是,当我在一个布局中有2个微调器时,然后在微调器1中选择了微调器2上的电话旋转选择。
例如:
Spinner1具有项test1,test2,test3。
Spinner2具有项test4,test5,test6。
当我在 Spinner1 上选择 test2 并在 Spinner2 上选择 test5 并旋转手机,然后在 Spinner1上选中的项目是 test5 ,这甚至是不可能的。它仅在我的测试设备Samsung S9上发生。当我在OnePlus或Pixel模拟器等其他手机上执行相同操作时,则Spinner1的选择保持不变,即为 test2 。
MainActivity代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TestSpinner testTestSpinner1 = findViewById(R.id.testSpinner1);
testTestSpinner1.setItems(Arrays.asList("test1", "test2", "test3"));
TestSpinner testTestSpinner2 = findViewById(R.id.testSpinner2);
testTestSpinner2.setItems(Arrays.asList("test4", "test5", "test6"));
}
activity_main代码
<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:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
tools:context=".MainActivity">
<com.skolimowski.testexposeddropdownmenu.TestSpinner
android:id="@+id/testSpinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.skolimowski.testexposeddropdownmenu.TestSpinner
android:id="@+id/testSpinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/testSpinner1" />
TestSpinner代码
public class TestSpinner extends FrameLayout {
private ArrayAdapter<String> adapter;
public TestSpinner(@NonNull Context context) {
super(context);
init(context);
}
public TestSpinner(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
public TestSpinner(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
FrameLayout parentLayout = (FrameLayout) inflate(context, R.layout.spinner_layout, this);
TextInputLayout textInputLayout = parentLayout.findViewById(R.id.til);
AutoCompleteTextView autoCompleteTextView = textInputLayout.findViewById(R.id.ac);
adapter = new ArrayAdapter<>(context, android.R.layout.simple_dropdown_item_1line);
autoCompleteTextView.setAdapter(adapter);
}
public void setItems(List<String> items) {
adapter.clear();
adapter.addAll(items);
}
}
spinner_layout代码
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="match_parent">
<AutoCompleteTextView
android:id="@+id/ac"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>