0

this 검색 가능한 회 전자 용 타사 라이브러리를 사용하고 있습니다. 모든 것은 훌륭하지만 문제는 내가 스피너에 어댑터를 설정할 때 드롭 다운에서 문자열 대신 객체 참조를 얻는다는 것입니다. 갱신 목록 라이브러리를 사용하여 웹 서비스로 채워진 배열 목록.타사 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 일을 낭비했다. 그러나 나는 조금의 대답도 얻지 않았다. 도와주세요.

enter image description here

답변

0

간단한 대답은이 라이브러리와 사용자 정의 어댑터를 설정할 수 없습니다입니다. SearchableListDialog (https://github.com/miteshpithadiya/SearchableSpinner/blob/master/searchablespinnerlibrary/src/main/java/com/toptoche/searchablespinnerlibrary/SearchableListDialog.java#L160)의 160 번째 줄을 보면 어댑터가 항상 문자열 용 단순 배열 어댑터로 설정됩니다.

원하는 것을 실제로 구현할 수있는 방법을 원할 경우 라이브러리를 코드에 복사하고 필요한 것을 수정할 수 있습니다. 예를 들어, SearchableListDialog에 라인 (160)을 변경하면이 될 수 있습니다 :

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를 오버라이드 (override) 할 필요가 있습니다 귀하의 CurrencyConverter 검색을 작동 시키려면 :

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

실제로 toString()을 사용할 수 없으므로 사용자 지정 항목 목록에 2 개의 텍스트와 1 개의 이미지가 있습니다. 텍스트가 하나 뿐인 경우 toString()을 사용할 수 있지만 사용할 수없는 디자인을 사용자 정의 할 수 있습니다. 다른 해결책? –

+1

toString()은 검색 필터를 작동시키기위한 것입니다. 라이브러리의 SearchableListDialog를 변경하면 원하는 사용자 정의 어댑터가 제공됩니다. –

+0

나는 당신이 무엇을 요구하고 있는지 모른다. 위의 코드는 작동하며 원하는 것을 생성합니다. –