Метод getView () пользовательского BaseAdapter не запускается - PullRequest
0 голосов
/ 13 мая 2019

Я устанавливаю пользовательский базовый адаптер для списка массивов, но метод getView () моего адаптера не вызывается.Я перепробовал много решений, но ни одно из них не помогло мне.Я вызываю функцию setAdapter () из postExecute Aynctask

@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;
    }
}

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Обновите, если условие в вашем getView () и удалите другое и расширяет 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;
    }
0 голосов
/ 13 мая 2019
 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,parent,false);

        }

        else{
            rowView = inflater.inflate(R.layout.word_meaning_single,parent,false);
        }

Also check the size of list in


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