Я создал счетчик с настраиваемым адаптером, в котором у меня есть представление изображения и текстовое представление, когда я выбираю элемент из счетчика, затем я отображаю изображение с выбранным элементом, который работает идеально.

Проблема:

Но проблема в том, что когда я выбираю любой элемент, он показывает изображение с выбранным элементом в раскрывающемся списке. а также отображать то же самое (изображение и текст) в счетчике ..

Чего я хочу

Я хочу отображать только текст в счетчике без изображения, как вы можете видеть в this

Изображение показывает изображения с текстом в счетчике ... и я не хочу этого

Вот код, который я использую, пожалуйста, предложите мне решение Спасибо

public class SpinnerAdapter extends ArrayAdapter<SpinnerItem> {
    private Context mContext;
    private ArrayList<SpinnerItem> listState;

    public SpinnerAdapter(Context context, int resource,
            ArrayList<SpinnerItem> objects) {
        super(context, resource, objects);
        this.mContext = context;
        this.listState = objects;
    }

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

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

    @SuppressLint("InflateParams")
    public View getCustomView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null) {
            LayoutInflater layoutInflator = LayoutInflater.from(mContext);
            convertView = layoutInflator.inflate(R.layout.spinner_item_layout,
                    null);
            holder = new ViewHolder();
            holder.mTextView = (TextView) convertView.findViewById(R.id.text);
            holder.mCheckedImage = (ImageView) convertView
                    .findViewById(R.id.checkbox);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.mTextView.setText(listState.get(position).getTitle());

        if (listState.get(position).isSelected()) {
            holder.mCheckedImage.setVisibility(View.VISIBLE);
        } else {
            holder.mCheckedImage.setVisibility(View.INVISIBLE);
        }

        return convertView;
    }

    private class ViewHolder {
        private TextView mTextView;
        private ImageView mCheckedImage;
    }

    public void setSpinnerAdapter(ArrayList<SpinnerItem> spinnerItems) {

        this.listState = spinnerItems;
        notifyDataSetChanged();
    }
}


private void setBottelCountData() {
        final String[] select_qualification = { "", "1", "2",
                "3" };

        bottelCountList = new ArrayList<>();

        for (int i = 0; i < select_qualification.length; i++) {
            SpinnerItem spinnerItem = new SpinnerItem();
            spinnerItem.setTitle(select_qualification[i]);
            if (i == 2) {

                spinnerItem.setSelected(false);
            } else {
                spinnerItem.setSelected(false);
            }
            bottelCountList.add(spinnerItem);
        }

        bottelCountAdapter = new SpinnerAdapter(getActivity(), 0,
                bottelCountList);
        bottelCountAdapter.setDropDownViewResource(R.layout.spinner_item_layout);
        bottel_Count_Spinner.setAdapter(bottelCountAdapter);
        bottel_Count_Spinner.setSelection(3);
    }



bottel_Count_Spinner
                .setOnItemSelectedListener(new OnItemSelectedListener() {

                    public void onItemSelected(AdapterView<?> parent,
                            View view, int position, long id) {
                        if (position == 0) {
                            for (int count = 0; count < bottelCountList.size(); count++) {
                                bottelCountList.get(count).setSelected(false);
                            }
                            noOfBottel = 0;
                            return;
                        }
                        bottelCountList.get(position).setSelected(true);
                        for (int count = 0; count < bottelCountList.size(); count++) {
                            if (position != count) {
                                bottelCountList.get(count).setSelected(false);
                            }
                        }
                        bottel_Count_Spinner.setPrompt("Hello");
                        bottelCountAdapter.setSpinnerAdapter(bottelCountList);
                        noOfBottel = Integer.parseInt(bottelCountList.get(
                                position).getTitle());
                    }

                    public void onNothingSelected(AdapterView<?> parent) {
                    }
                });

Xml для макета счетчика

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/checkbox"
        android:layout_centerVertical="true"
        android:padding="10dp"/>

    <ImageView
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:padding="10dp"
        android:src="@android:drawable/checkbox_on_background"
        android:contentDescription="@string/app_name"
        android:layout_marginLeft="10dp"
        android:layout_alignParentStart="true" />

</RelativeLayout>
2
Mustanser Iqbal 30 Окт 2015 в 13:26

3 ответа

Лучший ответ

У вас есть два метода

  • getView - отображается после выбора значения
  • getDropDownView - определяет, как вы должны выглядеть в раскрывающемся списке.

Вы должны изменить свой getCustomView и обработать разницу (скрыть изображение флажка).

Попробуй это

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    return getCustomView(position, convertView, parent, true);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    return getCustomView(position, convertView, parent, false);
}

@SuppressLint("InflateParams")
public View getCustomView(int position, View convertView, ViewGroup parent, boolean isDropDown) {
    final ViewHolder holder;
    if (convertView == null) {
        LayoutInflater layoutInflator = LayoutInflater.from(mContext);
        convertView = layoutInflator.inflate(R.layout.spinner_item_layout,
                null);
        holder = new ViewHolder();
        holder.mTextView = (TextView) convertView.findViewById(R.id.text);
        holder.mCheckedImage = (ImageView) convertView
                .findViewById(R.id.checkbox);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.mTextView.setText(listState.get(position).getTitle());

    if (isDropDown) {
        if (listState.get(position).isSelected()) {
            holder.mCheckedImage.setVisibility(View.VISIBLE);
        } else {
            holder.mCheckedImage.setVisibility(View.INVISIBLE);
        }
    }
    else {
        holder.mCheckedImage.setVisibility(View.INVISIBLE);
    }

    return convertView;
}
3
Marko 30 Окт 2015 в 10:32

Попробуй это,

<RelativeLayout
                    android:id="@+id/rlCountry"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="20dp"
                    android:layout_marginRight="20dp"
                    android:layout_marginTop="10dp"
                    android:background="@android:color/white" >

                    <Spinner
                        android:id="@+id/spnCountry"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_centerHorizontal="true"
                        android:layout_centerVertical="true"
                        android:popupBackground="@android:color/transparent"
                        android:visibility="invisible" />

                    <Button
                        android:id="@+id/btnAllergies"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_alignParentStart="true"
                        android:layout_centerInParent="true"
                        android:background="@android:color/transparent"
                        android:gravity="start|center"
                        android:paddingBottom="5dp"
                        android:paddingEnd="5dp"
                        android:paddingLeft="10dp"
                        android:paddingRight="5dp"
                        android:paddingStart="10dp"
                        android:paddingTop="5dp"
                        android:tag="0"
                        android:text="Select Country"
                        android:textColor="#ACACAC"
                        android:textSize="14sp" />
                </RelativeLayout>
0
Parth Bhayani 30 Окт 2015 в 10:44

Вам необходимо разделить представления для методов getDropDownView и getView. getDropDownView вызывается для строки, которая используется для выбранного значения. С другой стороны, getView вызывается для каждой строки, когда вы открываете счетчик.

1
Emre Aktürk 30 Окт 2015 в 10:33