为什么getContext()方法适用于getView方法中的ArrayAdapter。
convertView = LayoutInflater.from(getContext()).inflate(R.layout.row,parent,false);
为什么相同的代码可以在BaseAdapter上运行?
Code Class扩展ArrayAdapter?
package com.example.manis.mylist3;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by Manis on 8/6/2016.
*/
public class NoteAdapter extends ArrayAdapter{
public NoteAdapter(Context context, ArrayList<Note> notes) {
super(context, 0 ,notes);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Log.v("adapter","called"+position);
Note note = (Note) getItem(position);
if(convertView==null){
// Log.v("noteAdapter","ConvertView was null");
convertView = LayoutInflater.from(getContext()).inflate(R.layout.row,parent,false);
}
TextView noteTitle= (TextView) convertView.findViewById(R.id.rowTitle);
TextView noteSubText= (TextView) convertView.findViewById(R.id.rowSubText);
ImageView img = (ImageView) convertView.findViewById(R.id.rowImg);
noteTitle.setText(note.getTitle());
noteSubText.setText(note.getSubtext());
img.setImageResource(note.getAssociatedDrawable());
return convertView;
}
}
NoteBaseAdapter类的代码扩展BaseAdapter
package com.example.manis.mylist3;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.util.ArrayList;
public class NoteBaseAdapter extends BaseAdapter {
ArrayList<Note> notes;
Context context;
public NoteBaseAdapter(Context c, ArrayList<Note> notes)
{
this.context=c;
this.notes=notes;
}
@Override
public int getCount() {
return notes.size();
}
@Override
public Object getItem(int position) {
return notes.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//error
convertView = LayoutInflater.from(getContext()).inflate(R.layout.row,parent,false);
}
}
答案 0 :(得分:0)
好吧,ArrayAdapter
扩展了BaseAdapter
并在其构造函数中有一个context
变量,该变量已保存,可以使用getContext()
进行访问。然而,BaseAdapter
有一个空构造函数。你没有提供一个,所以你不能从基类中获取它。如果您需要,可以像ArrayAdapter
类一样创建自己的构造函数并将context
保存在那里。