微调器setOnItemSelectedListener不适用于自定义适配器

时间:2019-08-25 19:14:21

标签: android android-spinner android-adapter

我制作了一个自定义微调器,以填充来自mysql DB的图像和文本列表 当我尝试从微调器中选择一个项目时,即使调试并在听众内部放置一个断点,它也不会进入。 我的适配器:

 public class SpinnerShopAdapter extends ArrayAdapter<supermarketspinnerGS> {
    private Context mcontext;
    ArrayList<supermarketspinnerGS> SavedListContent;
    public SpinnerShopAdapter(Context context, ArrayList<supermarketspinnerGS> SavedListContent) {
        super(context, 0, SavedListContent);
        this.mcontext = context;
        this.SavedListContent = SavedListContent;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        return initView(position, convertView, parent);
    }

    @Override
    public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        return initView(position, convertView, parent);
    }

    private View initView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(
                    R.layout.spinner_supermarket_row, parent, false
            );
        }

        ImageView imvSupermaket = convertView.findViewById(R.id.spinner_supermarket_imageView);
        TextView tvSupamrketname = convertView.findViewById(R.id.spinner_supermarket_name);
        TextView tvIdShop = convertView.findViewById(R.id.spinner_supermarket_idshop);

        supermarketspinnerGS currentItem = getItem(position);

        if (currentItem != null) {
            Glide.with(context).load(currentItem.getImage()).into(imvSupermaket);
            tvSupamrketname.setText(currentItem.getName());
            tvIdShop.setText(currentItem.getIdshop());
        }

        return convertView;
    }
}

onCreate代码:

 spinnerStore = (Spinner) findViewById(R.id.saveditemlist_spinner_storeshead);
    adapterHead = new SpinnerShopAdapter(ActivitySavedListItem.this, getListHeadArray);
 spinnerStore.setAdapter(adapterHead);
    spinnerStore.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                    supermarketspinnerGS clickedItem = (supermarketspinnerGS) parent.getItemAtPosition(position);
                    String clickedshopName = clickedItem.getIdshop();
                  selectedItemText=getListHeadArray.get(spinnerStore.getSelectedItemPosition()).getIdshop();
                    Toast.makeText(ActivitySavedListItem.this, clickedshopName + " selected", Toast.LENGTH_SHORT).show();

            }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

我真的不知道出什么问题了,期待您的帮助。如果您需要更多详细信息,请随时问我,我很乐意更新我的帖子

编辑: XML SPINNER

 <LinearLayout
                android:layout_width="200dp"
                android:layout_height="30dp"
                android:layout_marginStart="8dp"
                android:layout_marginTop="16dp"
                android:background="@drawable/spinner_market_shape"
                app:layout_constraintStart_toEndOf="@+id/textView13"
                app:layout_constraintTop_toBottomOf="@+id/textView10">

                <Spinner
                    android:id="@+id/saveditemlist_spinner_storeshead"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:paddingLeft="15dp"
                    android:paddingRight="15dp" />
            </LinearLayout>

spinner_supermarket_row.xml

<RelativeLayout  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="wrap_content">

<ImageView
    android:id="@+id/spinner_supermarket_imageView"
    android:layout_width="75dp"
    android:layout_height="25dp"
    android:layout_marginStart="4dp"
    android:layout_marginTop="2dp"
    android:layout_marginBottom="2dp"
    android:clickable="false"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/spinner_supermarket_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView"
    android:visibility="invisible"
     />

<TextView
    android:id="@+id/spinner_supermarket_idshop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView"
    android:visibility="invisible"
    />
</RelativeLayout >

2 个答案:

答案 0 :(得分:0)

不确定,但是

我认为您必须在initView函数的Spinner自定义适配器中设置Spinner项目Click侦听器

像这样:

 private View initView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(
                R.layout.spinner_supermarket_row, parent, false
        );
    }

    ImageView imvSupermaket = convertView.findViewById(R.id.spinner_supermarket_imageView);
    TextView tvSupamrketname = convertView.findViewById(R.id.spinner_supermarket_name);
    TextView tvIdShop = convertView.findViewById(R.id.spinner_supermarket_idshop);

    supermarketspinnerGS currentItem = getItem(position);

    if (currentItem != null) {
        Glide.with(context).load(currentItem.getImage()).into(imvSupermaket);
        tvSupamrketname.setText(currentItem.getName());
        tvIdShop.setText(currentItem.getIdshop());
    }

    parent.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

        if(position==CUSTOM_POSITION){ /*do something*/}                

        }
    });

    return convertView;
}

我希望为您工作

答案 1 :(得分:0)

尝试向XML微调器行上的所有元素添加clickable = false

相关问题