Android arrayAdapter和BaseAdapter getContext?为什么getContext适用于数组适配器但不适用于基础适配器?

时间:2016-08-07 14:49:15

标签: android listview android-adapter

为什么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);

    }
}

1 个答案:

答案 0 :(得分:0)

好吧,ArrayAdapter扩展了BaseAdapter并在其构造函数中有一个context变量,该变量已保存,可以使用getContext()进行访问。然而,BaseAdapter有一个空构造函数。你没有提供一个,所以你不能从基类中获取它。如果您需要,可以像ArrayAdapter类一样创建自己的构造函数并将context保存在那里。