【问题标题】:Null Pointer exception in the getView method of BaseAdapterBaseAdapter的getView方法中的空指针异常
【发布时间】:2011-08-17 20:20:31
【问题描述】:

我在 CustomAdapter 的 getView() 中得到空指针异常,这是完整的代码。

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();

有两个布局主要和vehicle_detail_listview。

  • 主布局:包含一个 textView 和 listView

  • vehicle_detail_listview:一个文本视图

现在从我正在写的 Activity 的 onCreate() 开始:

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

请让我知道我哪里做错了。

提前致谢

【问题讨论】:

    标签: android android-layout android-widget


    【解决方案1】:

    应该是这样的:

            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...
    您可以查看 here 的示例,但除了该错误之外,您的代码似乎是代码。

    编辑:除了视图持有者,看看它在我链接的例子中的方式,类必须是静态的以避免内存泄漏,并且不要使用 getter 和 setter。

    【讨论】:

    • 是的,你是对的,现在检查链接后,异常(空指针异常)出现在 creatView = viewInflator.inflate(parameter..) 方法..
    • @Amit 您需要将 parent 传递给方法 inflate : createView = viewInflator.inflate(R.layout.vehicle_detail_listview, parent, false);看例子。
    • 对.. 我让它工作了.. 在我的代码中我忘了放 viewInflator = LayoutInflater.from(context);公共CustomAdapter(上下文上下文){viewInflator = LayoutInflater.from(上下文); } CustomAdapter 适配器 = 新的 CustomAdapter(this);通过这个构造函数初始化..现在工作正常..谢谢
    • 好的!第一次,我还以为你没有初始化viewInflator,但是在你发布的代码中,它就在那里。看来我没看错:)
    【解决方案2】:

    因为你没有设置标签,你正在调用 getTag...

    替换

    if(viewInflator != null) with 
    if(createView != null)
    

    【讨论】:

    • 感谢您的回复和建议。我已更换,但现在异常出现在 createView = viewInflator.inflate(R.layout.vehicle_detail_listview, null);
    • 试试这个:viewInflator = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    猜你喜欢
    • 2015-11-05
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多