在这里得到一些关于旋转器问题的帮助。
单击下拉箭头时,列表显示正常。但是,单击选择时,微调器视图仍显示为空白。选择的文本不会出现。是什么给了什么?
在Android Studio的预览中,从我指定的android:条目看起来很好。屏幕截图:(https://imgur.com/a/vmdPA)
如您所见,背景是灰色的,其他一切都是白色背景。所以我不认为颜色是这里的问题。
我检查并更改了背景颜色,甚至删除了一些小部件,以便我可以看到有什么阻止选择显示的内容。
除了Spinner,Arraylist的正常声明,创建一个新的arrayadapter,setDropDwonViewResource,将arrayadapter设置为我需要做的微调器之外还有什么东西吗?
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, spinnerArray);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mStoreSpinner.setAdapter(adapter);
微调器的XML也可以是“简单”:
<Spinner
android:id="@+id/s_spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/recyclerord"
app:layout_constraintLeft_toRightOf="@+id/orderID"
app:layout_constraintTop_toBottomOf="@+id/header"
app:layout_constraintRight_toRightOf="@+id/ConstraintLayout"
android:visibility="visible"
android:layout_marginStart="0dp"
android:entries="@array/array_test"
>
</Spinner>
谢谢。
编辑: 这就是我添加的内容。
mStoreSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View v, int postion, long arg3) {
// TODO Auto-generated method stub
String spinnerValue= parent.getItemAtPosition(postion).toString();
Log.d(TAG, "test");
Toast.makeText(getBaseContext(), "Selected item" + spinnerValue, Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, spinnerArray);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mStoreSpinner.setAdapter(adapter);
答案 0 :(得分:2)
我还没有实现onClickListeners - 他们需要在旋转器工作正常之前就在那里吗? 我想是的。
向setOnItemSelectedListener
添加Spinner
,如下所示:
mStoreSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View v,
int postion, long arg3) {
// TODO Auto-generated method stub
String spinnerValue= parent.getItemAtPosition(postion).toString();
Toast.makeText(getBaseContext(),
"Selected item" + spinnerValue,
Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
也可以随时查看tutorial了解更多
您应该按照以下步骤操作:
声明您的Spinner
Spinner spinner = (Spinner) findViewById(R.id.s_spinner);
创建ArrayAdapter
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getApplicationContext(),
spinerArray, android.R.layout.simple_spinner_item);
设置DropDown
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
设置adapter
spinner.setAdapter(adapter);
有两种方法可以实现setOnItemSelectedListener()
implements OnItemSelectedListener
setOnItemSelectedListener(new OnItemSelectedListener() {...}
答案 1 :(得分:0)
这是有效的代码,这可以帮助您:
<Spinner
android:id="@+id/spinner"
style="?android:attr/textViewStyle"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:spinnerMode="dialog"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/colorBlack"
android:textColorHint="@color/colorGray"
android:textSize="@dimen/_14sdp" />
自定义 R.layout.list_item
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/_4sdp"
android:paddingLeft="@dimen/_14sdp"
android:paddingRight="@dimen/_14sdp"
android:paddingTop="@dimen/_4sdp"
android:text="Test"
android:textColor="@color/colorGray"
android:textSize="@dimen/_14sdp" />
像这样设置适配器:
SpinnerAdapter adapter = new SpinnerAdapter(mActivity, R.layout.list_item,
android.R.id.text1, yourListHere);
spinner.setAdapter(adapter);
SpinnerAdapter代码:
public class SpinnerAdapter extends ArrayAdapter {
public SpinnerAdapter(@NonNull Context context, @LayoutRes int resource, @IdRes int textViewResourceId, @NonNull Object[] objects) {
super(context, resource, textViewResourceId, objects);
}
public SpinnerAdapter(@NonNull Context context, @LayoutRes int resource, @IdRes int textViewResourceId, @NonNull List objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public int getCount() {
return super.getCount();
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
view.setPadding(0, view.getPaddingTop(), view.getPaddingRight(), view.getPaddingBottom());
return view;
}
}
答案 2 :(得分:0)
首先在xml中的spml控件中删除此行android:entries =“@ array / array_test”因为如果你在列表中传入适配器那么已经包含arraylist的spinner控件在那里删除它并在代码下面使用...
List<String> spinnerArray=new ArrayList<>(); // hear you can add in any array.
spinnerArray.add("Color");
spinnerArray.add("abd");
spinnerArray.add("cde");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, spinnerArray);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
答案 3 :(得分:0)
我有同样的问题。根据我的经验: 如果我们创建String类型的ArrayList,并且我们使用ArrayAdapter绑定列表。然后,请确保已将ArrayList转换为String Array。
ArrayAdapter<String> yourAdapter =
new ArrayAdapter<>(this, android.R.layout.simple_spinner_item,
yourArrayList.toArray(new String[yourArrayList.size()]));
这行得通!