首页 > 解决方案 > 未触发自定义 BaseAdapter 的 getView() 方法

问题描述

我正在为数组列表设置一个自定义基本适配器但是我的适配器的 getView() 方法没有被调用。我尝试了许多解决方案,但没有一个对我有用。我从 Aynctask 的 postExecute 调用 setAdapter() 函数

@Override
        protected void onPostExecute(ArrayList<Object> objects) {
            MyListAdapter myAdapter = new MyListAdapter(MySearchList.this,objects);
            ListView lv  = findViewById(R.id.MyList);
            lv.setAdapter(myAdapter);
            Log.d("done", "onPostExecute: Done");

        }

我的自定义适配器类是

public class MyListAdapter extends BaseAdapter {
    private final ArrayList<Object> myList;
    private final Activity context;
    private LayoutInflater inflater;

    public MyListAdapter(Activity context , ArrayList<Object> myList) {

        this.myList = myList;
        inflater = LayoutInflater.from(context);
        this.context = context;
        Log.d("constructor", String.valueOf(myList.size()));
    }


    @Override
    public int getCount() {
        Log.d("", "getCount: ");
        return myList.size();
    }

    @Override
    public Object getItem(int position) {
        return myList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }


    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View rowView;
        Log.e("adapting", myList.get(position).toString() );
        if (myList.get(position) instanceof wordDefination){
            Log.e("adapting", myList.get(position).toString() );
            rowView = inflater.inflate(R.layout.word_meaning_single,null,true);

        }

        else{
            rowView = inflater.inflate(R.layout.word_meaning_single,null,true);
        }

        return rowView;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

适配器的构造函数正在调用,但 getView() 方法不是

更新:我也尝试使用 ArrayAdapter 而不是 BaseAdapter 但不工作

public class MyListAdapter extends ArrayAdapter<Object> {
    private final ArrayList<Object> myList;
    private final Activity context;
    private LayoutInflater inflater;

    public MyListAdapter(Activity context , ArrayList<Object> myList) {
        super(context,R.layout.word_meaning_single,myList);
        this.myList = myList;
        inflater = LayoutInflater.from(context);
        this.context = context;
        Log.d("constructor", String.valueOf(myList.size()));
    }
@NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View rowView;
        Log.e("adapting", myList.get(position).toString() );
        if (myList.get(position) instanceof wordDefination){
            Log.e("adapting", myList.get(position).toString() );
            rowView = inflater.inflate(R.layout.word_meaning_single,null,true);

        }

        else{
            rowView = inflater.inflate(R.layout.word_meaning_single,null,true);
        }

        return rowView;
    }
}

标签: androidandroid-arrayadapter

解决方案


更新 getView() 中的 if 条件并删除 else 并扩展 BaseAdapter

public class MyListAdapter extends BaseAdapter {
    private final ArrayList<Object> myList;
    private final Activity context;

    public MyListAdapter(Activity context , ArrayList<Object> myList) {

        this.myList = myList;
        this.context = context;
        Log.d("===constructor", String.valueOf(myList.size()));
    }


    @Override
    public int getCount() {
        Log.d("===", "getCount: "+myList.size());
        return myList.size();
    }

    @Override
    public Object getItem(int position) {
        return myList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }


    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View rowView=convertView;
        Log.d("===adapting", myList.get(position).toString() );
        if (convertView == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            rowView = inflater.inflate(R.layout.word_meaning_single,parent,false);
        Log.d("adapting", myList.get(position).toString() );

        }


        return rowView;
    }

推荐阅读