2015-06-15 3 views
0

Я создал свой собственный 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); 

} 

Я использую аналогичный адаптер для другой деятельности, в приложении, и что один работает просто отлично. Что мне не хватает? Любая помощь приветствуется!

+0

Не могли бы вы указать код, в котором вы используете адаптер? –

+0

Теперь это в редактировании :) – jahed

+2

ваш адаптер равен null, потому что запрос сделан, как следует из названия, в фоновом режиме – njzk2

ответ

0

Вы звоните spinnerPrograms.setAdapter(adapterSchools);, а adapterSchools - null. Хотя похоже, что вы устанавливаете переменную в новый ProgramSelectionSchoolAdapter, этот код фактически не вызывается до завершения фоновой задачи. Попробуйте вызвать setAdapter в методе done.

+0

Это сделало это, спасибо – jahed

Смежные вопросы