无法从静态上下文引用非静态字段

时间:2016-03-22 06:41:56

标签: java android android-arrayadapter android-viewholder

我有一个带有一些属性的静态类,该类是静态的,但是我得到的字段不是静态的错误。

我无法找到解决方案,我看到的例子看起来非常相似。视图持有者始终位于适配器内部,如静态公共静态

这是我的ArrayAdapter:

public class NoteAdapter extends ArrayAdapter<Note> {

public static class ViewHolder{
    TextView noteTitle;
    TextView noteBody;
    ImageView noteIcon;
}

public NoteAdapter(Context context, ArrayList<Note> notes) {
    super(context, 0, notes);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Note note = getItem(position);
    ViewHolder viewHolder;

    if (convertView == null) {
        viewHolder = new ViewHolder();
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_row, parent, false);

        // == Here I am getting the error == 
        ViewHolder.noteTitle = (TextView) convertView.findViewById(R.id.text_item_note_title);
        ViewHolder.noteBody = (TextView) convertView.findViewById(R.id.text_item_note_body);
        ViewHolder.noteIcon = (ImageView) convertView.findViewById(R.id.image_item_note);

        convertView.setTag(viewHolder);
    }

    return convertView;
}

}

这是我的笔记模型:

public class Note {
    private String title, message;
    private long noteId, dateCreateMilli;
    private Category category;

    public enum Category {PERSONAL, TECHNICAL, QUOTE, FINANCE}

    public Note(String title, String message, Category category) {
        this.title = title;
        this.message = message;
        this.category = category;
        this.noteId = 0;
        this.dateCreateMilli = 0;
    }

    public Note(String title, String message, Category category, long noteId, long dateCreateMilli) {
        this.title = title;
        this.message = message;
        this.category = category;
        this.noteId = noteId;
        this.dateCreateMilli = dateCreateMilli;
    }

    public String getTitle() {
        return this.title;
    }

    public String getMessage() {
        return this.message;
    }

    public long getNoteId() {
        return this.noteId;
    }

    public long getDateCreateMilli() {
        return this.dateCreateMilli;
    }

    public Category getCategory() {
        return this.category;
    }

    public TextDrawable getIconResource() {
        return TextDrawable.builder().buildRound("P", android.R.color.darker_gray);
    }
}

感谢您的帮助。提前谢谢。

1 个答案:

答案 0 :(得分:5)

    ViewHolder.noteTitle = (TextView) convertView.findViewById(R.id.text_item_note_title);
    ViewHolder.noteBody = (TextView) convertView.findViewById(R.id.text_item_note_body);
    ViewHolder.noteIcon = (ImageView) convertView.findViewById(R.id.image_item_note);

ViewHolder的名称。该实例名为viewHolder(小写首字母)。字段noteTitle等是实例成员,必须引用实例(即viewHolder)。