When I load data to the spinner from a list data, it works. But When I create an adapter for spinner, it does not work. What is my problem?
Activity:
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;
}
}
It works without Custom Adapter:
//*********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******************************************************
the spinner will call your getCount() to determine how many items is in the list, in your implementation you're telling it that the list is always empty.
change your getCount() to the following
@Override
public int getCount() {
if (fieldOfficers!= null) {
return fieldOfficers.size();
}
return 0;
}