0

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.

enter image description here

Antwort

0

Die einfache Antwort ist, dass Sie nicht Ihre eigenen Adapter mit dieser Bibliothek können. Wenn Sie an der Linie sehen 160 seine SearchableListDialog (https://github.com/miteshpithadiya/SearchableSpinner/blob/master/searchablespinnerlibrary/src/main/java/com/toptoche/searchablespinnerlibrary/SearchableListDialog.java#L160) wird immer die Einstellung der Adapter mit einem einfachen Array-Adapter für Strings nur.

Wenn Sie einen Weg wollen tatsächlich implementieren, was Sie wollen, können Sie seine Bibliothek in Ihren Code kopieren und ändern, was Sie brauchen. Zum Beispiel die Leitung 160 in SearchableListDialog ändert dies zu sein:

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

Sie müssen Ihren Konstruktor für Ihren Adapter an, dies auch ändern:

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); 
} 

Und schließlich müssen Sie toString außer Kraft zu setzen in Ihr CurrencyConverter, um die Suche zum Laufen zu bringen:

@Override 
public String toString() 
{ 
    return short_name; 
} 
+0

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? –

+1

toString() ist nur die Suchfilter auf der Arbeit. Wenn Sie den SearchableListDialog der Bibliothek ändern, erhalten Sie den gewünschten benutzerdefinierten Adapter. –

+0

Ich weiß nicht, was Sie fragen. Der obige Code funktioniert und generiert, was Sie wollen. –

Verwandte Themen