Как исправить, что Spinner setAdapter () не работает? - PullRequest
0 голосов
/ 12 апреля 2019

Мое приложение для Android продолжает зависать, когда я вызываю диалог, содержащий этот счетчик, я уверен, что мой XML в порядке

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

Пожалуйста, если кто-нибудь может помочь, это будет так здорово.

    CountryManager cm = new CountryManager(this);
    user = new UserAppManager(this).getUser();
    String countries = user.getCountries();
    ArrayList<Country> countriesListe = cm.getCountryByCodes(countries);
    Spinner countrieSpinner = mDialogStart.findViewById(R.id.sp_countries);
    CountriesListAdapter adapter = new CountriesListAdapter(this, R.layout.country_list_item, countriesListe);
    countrieSpinner.setAdapter(adapter);
    country = user.getDefaultCountry();
    int position = adapter.indexOf(country);
    Log.w(TAG, "countries::" + countries + "|| country::" + country + " || position::" + position);
    countrieSpinner.setSelection(position);
    countrieSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long l) {
            country = Objects.requireNonNull(adapter.getItem(pos)).getCode();
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
            country = user.getDefaultCountry();
        }

код для списка адаптеров

    public class CountriesListAdapter extends ArrayAdapter<Country> {
private final Context context;
//private final String[] values;
private ArrayList<Country> countries;

public CountriesListAdapter(Context context,int ressource,ArrayList<Country> countries) {
    super(context, ressource, new CountryManager(context).getAllPays());
    this.context = context;
    this.countries = countries;
}

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

@Override
public Country getItem(int i) {
    return countries.get(i);
}

public int getPosition(Country item) {
    return countries.indexOf(item);
}

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

public int indexOf( String code) {
    for (int index = 0, count = getCount(); index < count; index++)
    {
        if (getItem(index).getCode().equals(code))  {
            return index;
        }
    }
    return -1;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View rowView = inflater.inflate(R.layout.country_list_item, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.txtViewCountryName);
    //ImageView imageView = (ImageView) rowView.findViewById(R.id.imgViewFlag);

    String prefix = getItem(position).getPrefix();
    String code = getItem(position).getCode();
    String label = getItem(position).getLabel();
    textView.setText(" "+code);

    String buttonID = "drawable/" + code.toLowerCase();
    int resID = context.getResources().getIdentifier(buttonID, "id", context.getPackageName());
    Drawable img = context.getResources().getDrawable( resID);
    textView.setCompoundDrawablesWithIntrinsicBounds( img, null, null, null);

    return rowView;
}

@Override
public View getDropDownView(int position,  View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View rowView = inflater.inflate(R.layout.country_list_item, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.txtViewCountryName);
    //ImageView imageView = (ImageView) rowView.findViewById(R.id.imgViewFlag);

    String prefix = getItem(position).getPrefix();
    String code = getItem(position).getCode();
    String label = getItem(position).getLabel();
    textView.setText(" "+code);
    textView.setGravity(Gravity.LEFT);

    String buttonID = "drawable/" + code.toLowerCase();
    int resID = context.getResources().getIdentifier(buttonID, "id", context.getPackageName());
    Drawable img = context.getResources().getDrawable( resID);
    textView.setCompoundDrawablesWithIntrinsicBounds( img, null, null, null);

    return rowView;
}

private String GetCountryZipCode(String ssid){
    Locale loc = new Locale("", ssid);

    return loc.getDisplayCountry().trim();
}
}

Я ожидаю получить страны для каждого пользователя из SQLite

...