Установите адаптер на счетчик с помощью стороннего API.

Я использую эту стороннюю библиотеку для поискового счетчика. Все хорошо, но проблема в том, что когда я устанавливаю адаптер на счетчик, поэтому в раскрывающемся списке я получаю ссылку на объект вместо строки. Список-массив, заполненный веб-сервисами с использованием библиотеки модификации.

Ниже моя деятельность:

countriesCustomAdapterInr = new CountriesCustomAdapterInr(getActivity(), R.layout.custom_spinner_items, arrayList,res);
spinner.setAdapter(countriesCustomAdapterInr); 

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                            @Override
                            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                                Toast.makeText(getActivity(), ""+arrayList.get(i).getFull_name()+i, Toast.LENGTH_LONG).show();
                            }

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

                            }
                        });  

Это мой модельный класс:

public class CurrencyConverter {

    @SerializedName("short_name")
    private String short_name;

    @SerializedName("full_name")
    private String full_name;

    @SerializedName("flag")
    private String flag;

    public CurrencyConverter(String short_name, String full_name, String flag) {
        this.short_name = short_name;
        this.full_name = full_name;
        this.flag = flag;
    }

    public CurrencyConverter() {}

    public String getShort_name() {
        return short_name;
    }

    public void setShort_name(String short_name) {
        this.short_name = short_name;
    }

    public String getFull_name() {
        return full_name;
    }

    public void setFull_name(String full_name) {
        this.full_name = full_name;
    }

    public String getFlag() {
        return flag;
    }

    public void setFlag(String flag) {
        this.flag = flag;
    }

}

Мой адаптер:

public class CountriesCustomAdapterInr extends ArrayAdapter<String> {

    private ArrayList data;
    public Resources res;
    private LayoutInflater inflater;

    public CountriesCustomAdapterInr(
            FragmentActivity activitySpinner,
            int textViewResourceId,
            ArrayList objects,
            Resources resLocal)
    {
        super(activitySpinner, textViewResourceId, objects);

        data     = objects;
        res      = resLocal;
        inflater = (LayoutInflater) activitySpinner.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

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

    private View getCustomView(int position, View convertView, ViewGroup parent) {

        View row = inflater.inflate(R.layout.custom_spinner_items, parent, false);

        CurrencyConverter tempValues = null;
        tempValues = (CurrencyConverter) data.get(position);

        TextView label        = (TextView)row.findViewById(R.id.textView_short_name);
        TextView sub          = (TextView)row.findViewById(R.id.textView_full_name);
        ImageView flag = (ImageView)row.findViewById(R.id.imageView_flag);
        TextView line = (TextView)row.findViewById(R.id.row);
        if(position==0){
            label.setText("INR");
            sub.setText("India");
            flag.setImageResource(R.drawable.ind);
            line.setVisibility(View.GONE);
        }
        else
        {
            // Set values for spinner each row
            label.setText(tempValues.getShort_name());
            sub.setText(tempValues.getFull_name());
            Picasso.with(getContext()).load("http://currencyconvertor.ccube9projects.com/uploads/country_flag/"+ tempValues.getFlag()).into(flag);
        }


        return row;
    }

Я прикрепил изображение также для большего пояснения. Пожалуйста, кто-нибудь может помочь? Я потратил впустую 2 дня, но я не получил никакого ответа. Пожалуйста помоги.

введите здесь описание изображения




Ответы (1)


Простой ответ: вы не можете установить свой собственный адаптер с помощью этой библиотеки. Если вы посмотрите на строку 160 его SearchableListDialog (https://github.com/miteshpihadiya/SearchableSpinner/blob/master/searchablespinnerlibrary/src/main/java/com/toptoche/searchablespinnerlibrary/SearchableListDialog.java#L160) это всегда устанавливайте адаптер на простой адаптер массива только для строк.

Если вам нужен способ реализовать то, что вы хотите, вы можете скопировать его библиотеку в свой код и изменить то, что вам нужно. Например, изменить строку 160 в SearchableListDialog следующим образом:

listAdapter = new CountriesCustomAdapterInr(getContext(), R.layout.custom_spinner_items, items, getResources());

Вам также нужно будет изменить свой конструктор для вашего адаптера на это:

public CountriesCustomAdapterInr(
    Context context,
    int textViewResourceId,
    List<CurrencyConverter> objects,
    Resources resLocal) {
    super(context, textViewResourceId, objects);

    data = objects;
    res = resLocal;
    inflater = (LayoutInflater) context.getSystemService(Context
        .LAYOUT_INFLATER_SERVICE);
}

И, наконец, вам нужно будет переопределить toString в вашем CurrencyConverter, чтобы поиск работал:

@Override
public String toString()
{
    return short_name;
}
person tim.paetz    schedule 08.11.2017
comment
На самом деле у меня есть 2 текста и 1 изображение в списке пользовательских элементов, поэтому я не могу использовать toString(). Если у меня есть только один текст, я могу использовать toString(), но настроить дизайн, который я не могу использовать. Любое другое решение? - person Menu; 09.11.2017
comment
toString() предназначен только для того, чтобы заставить работать фильтр поиска. Изменение SearchableListDialog в библиотеке даст вам нужный адаптер. - person tim.paetz; 09.11.2017
comment
Я не знаю, о чем вы спрашиваете. Приведенный выше код работает и генерирует то, что вы хотите. - person tim.paetz; 09.11.2017
comment
Привет @tim.paetz Я понял твою точку зрения. Я получаю результат так, как хочу, но все же есть одна проблема, например, в виджете поиска, который я ищу в Лондоне, я не получаю результат, отфильтрованный как Лондон, но при нажатии на список результатов отображается элемент как Лондон. Это это похоже на изменение позиции элементов, но в списке не отображается результат поиска. можете подсказать в чем проблема? Помогите мне, пожалуйста. - person Menu; 12.11.2017
comment
Вы должны опубликовать еще один вопрос с вашим кодом и что не так. - person tim.paetz; 13.11.2017
comment
Я разместил вопрос @tim.paetz, это ссылка stackoverflow.com/questions/47278704/, пожалуйста, помогите мне. - person Menu; 14.11.2017
comment
Здравствуйте @tim.paetz Пожалуйста, ответьте на мой ТАК вопрос. Я не могу найти проблему. Помогите мне, пожалуйста. Я потратил впустую 4-5 дней, но я не получил никакого решения. Пожалуйста помоги. - person Menu; 15.11.2017