4

スピナー リストに 10 個のアイテムがあるとします。そして項目番号 3 はすでに選択されています。ここで問題は、ユーザーが選択を変更したい場合です。これ(項目番号 3) が既に選択されている項目であることを何らかの形で示したいと思います。チェックマークを付けたり、何らかの背景を設定したり、同様の方法でこれを実現したいと考えています。

誰でもこの問題で私を助けてもらえますか?

4

1 に答える 1

1

この機能にはカスタム アダプターを使用します。ビューを拡張してBaseAdapter膨らませてSpinnerコントロールDroppdownするだけです。

List<String> stagesValues = new ArrayList<>(stagesResults.values());
mStageSpn.setAdapter(new DropdownAdapter(mContext, stagesValues, mStageSpn));

public class DropdownAdapter extends BaseAdapter {

    private final LayoutInflater mInflater;
    private List<String> mData;
    private Spinner mStageSpn;

    public DropdownAdapter(Context context, List<String> data, Spinner stageSpn) {
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mData = data;
        mStageSpn = stageSpn;
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Object getItem(int arg0) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = mInflater.inflate(android.R.layout.simple_spinner_item, null);
        ((TextView) view.findViewById(android.R.id.text1)).setText(mData.get(mStageSpn.getSelectedItemPosition()));

        return view;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        View view = mInflater.inflate(R.layout.spinner_item, null);
        if (mStageSpn.getSelectedItemPosition() == position)
            view.setBackgroundColor(Color.RED);
        ((TextView) view.findViewById(R.id.text_id)).setText(mData.get(position));

        return view;
    }

}
于 2014-06-12T05:16:47.833 に答える