如何使用 JSON 数据创建自定义微调器适配器?
How to create Custom spinner adapter with JSON Data?
当我将数据从列表数据加载到微调器时,它起作用了。但是当我为微调器创建适配器时,它不起作用。我的问题是什么?
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;
}
}
它在没有自定义适配器的情况下工作:
//*********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******************************************************
更改您的 getCount()
像这样
@Override
public int getCount() {
if (fieldOfficers!= null) {
return fieldOfficers.size();
}
return 0;
}
微调器将调用您的 getCount() 以确定列表中有多少项,在您的实现中,您告诉它列表始终为空。
将您的 getCount() 更改为以下
@Override
public int getCount() {
if (fieldOfficers!= null) {
return fieldOfficers.size();
}
return 0;
}
当我将数据从列表数据加载到微调器时,它起作用了。但是当我为微调器创建适配器时,它不起作用。我的问题是什么?
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;
}
}
它在没有自定义适配器的情况下工作:
//*********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******************************************************
更改您的 getCount() 像这样
@Override
public int getCount() {
if (fieldOfficers!= null) {
return fieldOfficers.size();
}
return 0;
}
微调器将调用您的 getCount() 以确定列表中有多少项,在您的实现中,您告诉它列表始终为空。
将您的 getCount() 更改为以下
@Override
public int getCount() {
if (fieldOfficers!= null) {
return fieldOfficers.size();
}
return 0;
}