Я создал свой собственный ArrayAdapter, но у меня возникли проблемы с методом getView - он никогда не называется. Мой Logcat показывает только журнал из конструктора и никогда не из getView. Я попытался перейти на BaseAdapter и попробовать переопределить getCount, но без везения getView не будет вызван. Я гарантировал, что список, который прошел, не пуст, но все равно не повезло. Это мой код:getView в ArrayAdapter не называется
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);
}
Я использую аналогичный адаптер для другой деятельности, в приложении, и что один работает просто отлично. Что мне не хватает? Любая помощь приветствуется!
Не могли бы вы указать код, в котором вы используете адаптер? –
Теперь это в редактировании :) – jahed
ваш адаптер равен null, потому что запрос сделан, как следует из названия, в фоновом режиме – njzk2