[英]getView in ArrayAdapter is not being called
我已經制作了自己的ArrayAdapter,但是getView方法遇到了問題-從未調用過它。 我的Logcat僅顯示來自構造函數的日志,而從未顯示getView。 我嘗試過更改為BaseAdapter並嘗試覆蓋getCount,但是沒有運氣,不會調用getView。 我確保傳遞的列表不是空的,但仍然沒有運氣。 這是我的代碼:
public class ProgramSelectionSchoolAdapter extends ArrayAdapter<String> {
private ArrayList<String> schools;
private Activity context;
private static final String TAG = "ProgSelSchoolAdapter";
public ProgramSelectionSchoolAdapter(Activity context, ArrayList<String> schools) {
super(context, R.layout.spinner_program_selection_row, schools);
this.schools = schools;
this.context = context;
Log.v(TAG, "ProgramSelectionSchoolAdapter was created");
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
Log.v(TAG, "getView was called");
ViewHolder holder;
if (rowView == null) {
holder = new ViewHolder();
// Inflate the row layout
LayoutInflater inflater = LayoutInflater.from(context);
rowView = inflater.inflate(R.layout.spinner_program_selection_row, parent, false);
// Use of view holder to save performance
holder.spinnerItem = (TextView) rowView.findViewById(R.id.tvSpinnerItem);
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
}
// Set the text for the view holder
String school = schools.get(position);
holder.spinnerItem.setText(school);
Log.v(TAG, school + " added to spinnerItem");
return rowView;
}
static class ViewHolder {
public TextView spinnerItem;
}
}
這是我使用適配器的方式:
private void setUpSpinner() {
// Construct a list to be used for storing unique school values for the adapter
schools = new ArrayList<String>();
// Query for all organizers
ParseQuery<Organizer> query = ParseQuery.getQuery(Organizer.class);
query.whereEqualTo(COLUMN_APP, APP_NAME);
query.orderByAscending(COLUMN_SCHOOL);
query.findInBackground(new FindCallback<Organizer>() {
@Override
public void done(List<Organizer> organizers, ParseException e) {
if(e == null) {
// All organizers for the chosen app was received successfully
Log.v(TAG, "Organizers received successfully");
// Go through all organizers and look for unique school values
for (Organizer organizer : organizers) {
String school = organizer.getSchool();
if(!schools.contains(school)) {
// Add the unique school to the ArrayList
schools.add(school);
Log.v(TAG, school + " added to list");
}
}
// Create the adapter for the schools
adapterSchools = new ProgramSelectionSchoolAdapter(ProgramSelection.this, schools);
} else {
// Something went wrong
e.printStackTrace();
}
}
});
// Create spinner and set adapter
spinnerPrograms = (Spinner) findViewById(R.id.spinnerPrograms);
spinnerPrograms.setAdapter(adapterSchools);
}
我正在為應用程序中的另一項活動使用類似的適配器,並且該適配器工作正常。 我想念什么? 任何幫助表示贊賞!
您正在調用spinnerPrograms.setAdapter(adapterSchools);
而adapterSchools
為null。 盡管您似乎將變量設置為新的ProgramSelectionSchoolAdapter,但是直到后台任務完成后才真正調用該代碼。 嘗試在done
方法中調用setAdapter。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.