Исключение нулевого указателя в методе getView BaseAdapter - PullRequest
0 голосов
/ 17 августа 2011

Я получаю исключение нулевого указателя в getView () моего CustomAdapter, вот полный код.

private class CustomAdapter extends BaseAdapter
{
    LayoutInflater viewInflator;

    public CustomAdapter(Context context)
    {
        viewInflator = LayoutInflater.from(context);
    }

    public int getCount() 
    {
        return weekDate.size();
    }

    public Object getItem(int arg0) 
    {
        return arg0;
    }

    public long getItemId(int arg0) 
    {
        return arg0;
    }

    public View getView(int position, View createView, ViewGroup viewGroup) 
    {
        ViewHolder holder;

        if(viewInflator != null)
            holder = (ViewHolder) createView.getTag();
        else
        {
            createView = viewInflator.inflate(R.layout.vehicle_detail_listview, null);
            holder = new ViewHolder();
            holder.setTextView( (TextView) createView.findViewById(R.id.listContent) );
            createView.setTag(holder);
        }

        holder.getTextView().setText(weekDate.get(position));

        return createView;
    }

    private class ViewHolder
    {
        private TextView textView;

        public TextView getTextView() 
        {
            return textView;
        }

        public void setTextView(TextView textView) 
        {
            this.textView = textView;
        }
    }
}

теперь исключение нулевого указателя возникает в строке holder = (ViewHolder) createView.getTag();

естьдве раскладки main & vehicle_detail_listview.

  • Основной макет: содержит один textView & listView

  • vehicle_detail_listview: один текстовый просмотр

Теперь из onCreate () упражнения я пишу это:

    CustomAdapter adapter = new CustomAdapter(this);
    listView.setAdapter(adapter);

Пожалуйста, дайте мне знать, где я делаю не так.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 17 августа 2011

это потому что вы не установили тег и вызываете getTag ...

replace

if(viewInflator != null) with 
if(createView != null)
1 голос
/ 17 августа 2011

Это должно выглядеть так:

        if(createView != null)
            holder = (ViewHolder) createView.getTag();
        else
        {
            createView = viewInflator.inflate(R.layout.vehicle_detail_listview, null);
            holder = new ViewHolder();
            holder.setTextView( (TextView) createView.findViewById(R.id.listContent) );
            createView.setTag(holder);
        }

Вам не нужно проверять, если viewInflator! = Null, но вы используете createView сразу после этого, не проверяя его ...
Вы можете посмотреть здесь для примера, но кроме этой ошибки ваш код выглядит как код.

РЕДАКТИРОВАТЬ: кроме держателя представления, посмотрите, как это в примере, который я связал, класс должен быть статическим дляИзбегайте утечки памяти и не пытайтесь использовать геттер и сеттер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...