微调器选择未显示

时间:2018-03-12 09:28:06

标签: android spinner

在这里得到一些关于旋转器问题的帮助。

单击下拉箭头时,列表显示正常。但是,单击选择时,微调器视图仍显示为空白。选择的文本不会出现。是什么给了什么?

在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);

4 个答案:

答案 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()

  1. 实施其界面:implements OnItemSelectedListener
  2. 使用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()]));

这行得通!