簡體   English   中英

不會調用ArrayAdapter中的getView

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM