Ich verwende this 3rd-Party-Bibliothek für durchsuchbare Spinner verwenden. Alles ist gut, aber Problem ist, dass, wenn ich den Adapter an die Spinner so in der Drop-down gesetzt ich anstelle von String-Objekt Referenz zu bekommen. Die Array-Liste von Web-Services mit Retrofit-Bibliothek gefüllt.den Adapter Set zu 3rd-Party-API
Unten ist meine Aktivität:
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) {
}
});
Das ist meine Modellklasse:
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;
}
}
Mein Adapter:
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;
}
Ich habe auch angebracht Bild für die weitere Klärung. Bitte kann jemand helfen? Ich habe meine 2 Tage verschwendet, aber ich habe keine Antwort bekommen. Bitte helfen Sie.
Eigentlich habe ich 2 Text und 1 Bild in der Liste der benutzerdefinierten Elemente, so dass ich toString() nicht verwenden kann. Wenn ich nur einen Text habe, kann ich toString() verwenden, aber das Design anpassen, das ich nicht verwenden kann. Irgendeine andere Lösung? –
toString() ist nur die Suchfilter auf der Arbeit. Wenn Sie den SearchableListDialog der Bibliothek ändern, erhalten Sie den gewünschten benutzerdefinierten Adapter. –
Ich weiß nicht, was Sie fragen. Der obige Code funktioniert und generiert, was Sie wollen. –