listView适配器类:
public class ListViewAdapter extends ArrayAdapter {
private Context context;
private int resource;
private ArrayList<HashMap<String,String>> list2 = new ArrayList<>();
public ListViewAdapter(Context context,int resource, List<HashMap<String, String>> list) {
super(context, resource, list);
this.resource = resource;
this.context = context;
this.list2 = (ArrayList<HashMap<String, String>>) list;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View row = convertView;
ViewHolder holder;
Object newMap = list2.get(position);
if (row == null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(resource, parent, false);
holder = new ViewHolder();
holder.name1 = (TextView) row.findViewById(R.id.name);
holder.add = (TextView) row.findViewById(R.id.address);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
String pname = ((HashMap<String, String>) newMap).get("place_name");
holder.name1.setText(pname);
return row;
}
public class ViewHolder {
TextView name1,add;
}
}
ListView
适配器类中的所有数据。但是,当我们尝试将数据显示到列表视图中时,它会崩溃。 ListView Adapter
类中的holder.name1.setText(pname)
显示的崩溃。和错误显示NullPointerException
在if
中添加.setText()
发生错误,因为您在if
中初始化Textview name1
,因此请检查下面的代码
@Override
public View getView(int position, View convertView, ViewGroup parent){
View row = convertView;
ViewHolder holder;
Object newMap = list2.get(position);
if (row == null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(resource, parent, false);
holder = new ViewHolder();
holder.name1 = (TextView) row.findViewById(R.id.name);
holder.add = (TextView) row.findViewById(R.id.address);
String pname = ((HashMap<String, String>) newMap).get("place_name");
holder.name1.setText(pname);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
return row;
}
根据我的理解,有可能显示null指针异常的理由是,您可能在'place_name'中获得null值,而另一个是您的引用r.id.name。不可用。
像以下内容一样编辑您的代码,
String pname="";
pname = ((HashMap<String, String>) newMap).get("place_name");
if(holder.name1!=null){
holder.name1.setText(pname)
}
最终解决了这个问题,愚蠢的错误我没有在r.layout.activity.list_view中添加textView。
适配器中没有问题,除了一个错误
在您的ListViewAdapter类中添加以下代码
喜欢这个
@Override
public int getCount() {
return list2.size();
}
希望这对您有用...