2017-02-25 51 views
0

當我將數據從列表數據加載到微調器時,它可以工作。但是,當我爲微調器創建適配器時,它不起作用。我的問題是什麼?如何使用JSON數據創建自定義微調器適配器?

活動:

final FieldOfficerApiInterface apiService=OperatingApiClient.getClient().create(FieldOfficerApiInterface.class); 

     Call<FieldOfficerApiResponse> call = apiService.getAllEOByBranchID(branchid); 
     call.enqueue(new Callback<FieldOfficerApiResponse>() { 
      @Override 
      public void onResponse(Call<FieldOfficerApiResponse> call, Response<FieldOfficerApiResponse> response) { 
       List<FieldOfficer> fieldofficerlist=response.body().getFieldofficerlist(); 
       Log.d(TAG,"Number of Fieldofficerlist received: "+fieldofficerlist.size()); 

       //*********DROPDOWN****************************************************** 

       final Spinner spnrFieldOfficer=(Spinner)findViewById(R.id.spinnerFieldOfficer); 

       CustomSpinnerAdapter adapter=new CustomSpinnerAdapter(getApplicationContext(),fieldofficerlist); 
       spnrFieldOfficer.setAdapter(adapter); 

       //*********END DROPDOWN****************************************************** 
      } 

      @Override 
      public void onFailure(Call<FieldOfficerApiResponse> call, Throwable t) { 
       // Log error here since request failed 
       Log.e(TAG,t.toString()); 

      } 
     }); 

CustomSpinnerAdapter:

public class CustomSpinnerAdapter extends BaseAdapter { 

    private List<FieldOfficer> fieldOfficers; 
    private Context context; 
    LayoutInflater inflter; 


    public CustomSpinnerAdapter(Context context, List<FieldOfficer> fieldOfficers) { 
     this.context = context; 
     this.fieldOfficers = fieldOfficers; 
     this.inflter = (LayoutInflater.from(context)); 
    } 

    @Override 
    public int getCount() { 
     return 0; 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     convertView=inflter.inflate(R.layout.custom_spinner_items,null); 
     TextView tv=(TextView)convertView.findViewById(R.id.textView2); 
     tv.setText(fieldOfficers.get(position).getFoname()); 
     return convertView; 
    } 
} 

它的工作原理沒有自定義適配器:

//*********DROPDOWN****************************************************** 
       ArrayAdapter<FieldOfficer> adapter; 
       adapter = new ArrayAdapter<FieldOfficer>(getApplicationContext(), android.R.layout.simple_selectable_list_item,fieldofficerlist); //getApplication() 
       //setting adapter to spinner 
       spnrFieldOfficer.setAdapter(adapter); 
//*********END DROPDOWN****************************************************** 

回答

0

微調器會調用你的getCount()來確定列表中有多少項,在你的實現中你告訴它列表總是空的。

您getCount將()更改爲以下

@Override 
    public int getCount() { 
     if (fieldOfficers!= null) { 
      return fieldOfficers.size(); 
     } 
     return 0; 
    } 
+0

它的工作原理。你能幫我做到這一點嗎?它僅適用於「List 」。我想將此適配器稱爲微調器。我怎樣才能做到這一點? –

2

更改您的getCount將() 這樣

@Override 
    public int getCount() { 
     if (fieldOfficers!= null) { 
      return fieldOfficers.size(); 
     } 
     return 0; 
    } 
+0

它的工作原理。你能幫我做到這一點嗎?它僅適用於「List 」。我想將此適配器稱爲微調器。我怎樣才能做到這一點? –

+0

實現setOnItemSelectedListener。 –