【问题标题】:inflater.inflate gives nullpointer in Adapter getview method. Why?inflater.inflate 在 Adapter getview 方法中给出空指针。为什么?
【发布时间】:2014-01-15 09:01:59
【问题描述】:

在我的 Android 应用中,我正在构建我的第一个自定义适配器。现在,我在为 convertView 充气的那一行遇到了一个空指针。请看下面的代码:

private List<String> possibilitiesList = new ArrayList<String>();

public void setPossibilitiesList(List<String> possibilitiesList) {
    for (String possibility : possibilitiesList) {
        addItem(possibility);
    }
}

public void addItem (final String item) {
    possibilitiesList.add(item);
    notifyDataSetChanged();
}

private LayoutInflater inflater;

@Override
public View getView(final int position, View convertView, ViewGroup viewGroup) {
    Log.e(this, "is called here!!");
    ViewHolder holder = new ViewHolder();
    convertView = inflater.inflate(R.layout.list_item_posibility, viewGroup, false);
    holder.possibilityTitle = (TextView) convertView.findViewById(R.id.text_possibility);
    holder.possibilityTitle.setText(possibilitiesList.get(position));
    return convertView;
}

在我的片段中,我将可能性列表设置如下:

List<String> list = Arrays.asList(getResources().getStringArray(R.array.the_possibilities));
Log.e(this, new Integer(list.size()).toString()); // outputs 8
adapter.setPossibilitiesList(list);

我 100% 确定 list_item_posibility.xml 存在(Android Studio 也突出显示它是存在的),所以我有点不明白为什么这会给出一个空指针。

有人知道我在这里做错了什么吗?

【问题讨论】:

  • 告诉我们你在哪里初始化充气机。
  • 你的inflater 初始化了吗?
  • @Raghunandan - 我在问题中添加了充气机的初始化。
  • @kramer65 这只是一个声明而不是初始化

标签: java android nullpointerexception listadapter


【解决方案1】:

private LayoutInflater inflater; 只是声明未初始化

您需要将上下文传递给适配器类的构造函数,然后使用它来初始化inflater。

 new Yourcustomadapter(ActivityName.this); 
// pass the context here and other params

然后

 private LayoutInflater inflater; 
 public Yourcustomadapterr(Context context)
 {
      inflater = LayoutInflater.from(context);
 }

也检查一下

http://developer.android.com/reference/android/view/View.html#getContext()

【讨论】:

  • 或者他可以使用 ViewGroup 的上下文
  • @blackbelt 是的,当然可以使用。
  • @Blundell 我已经用文字提到过,是的,我从你的帖子中复制了new CustomAdapter(ActivityName.this);。但正如我所说,我已经引用了“您需要将上下文传递给适配器类的构造函数,然后使用它来初始化充气机。”在你回答之前。我只是编辑以使其完整。
  • 谢谢你,现在它不再给我空指针了。还有一个问题;它现在只显示第一项,即使我传递给它的列表有 8 种可能性。有什么想法吗?
  • @kramer65 展示了如何将列表传递给适配器类以及它在哪里初始化
【解决方案2】:

您的充气机为空,您需要将其设置为充气机的引用

private final LayoutInflater inflater;

public CustomAdapter(LayoutInflater inflater) {
  this.inflater = inflater;
}

@Override
public View getView(final int position, View convertView, ViewGroup viewGroup) {
    Log.e("this", "is called here!!");
    ViewHolder holder = new ViewHolder();
    convertView = inflater.inflate(R.layout.list_item_posibility, viewGroup, false);
    holder.possibilityTitle = (TextView) convertView.findViewById(R.id.text_possibility);
    holder.possibilityTitle.setText(possibilitiesList.get(position));
    return convertView;
}

然后你在哪里新建你的适配器,或者:(取决于你在哪里初始化适配器)

new CustomAdapter(LayoutInflater.from(this));

new CustomAdapter(LayoutInflater.from(context));

new CustomAdapter(getActivity().getLayoutInflater());

new CustomAdapter((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE));

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 2011-06-03
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多