【问题标题】:Creating a custom Listview and error Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference创建自定义列表视图和错误尝试在空对象引用上调用虚拟方法'boolean java.lang.String.equals(java.lang.Object)'
【发布时间】:2016-04-24 13:54:38
【问题描述】:

我正在尝试制作自定义列表视图

@Override
public View getView(int i, View view, ViewGroup parent) {
    ViewHolder viewHolder;
    if (view == null){
        inflater = (LayoutInflater) context.getSystemService(Service.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.cities_weather_detail, parent, false);
        viewHolder = new ViewHolder();
        viewHolder.cityName = (TextView) view.findViewById(R.id.city_name);
        Data data = citiesData.get(i);
        viewHolder.cityName.setText(data.getCity().getName());
        view.setTag(viewHolder);
    }
    return view;
}

当我尝试访问城市名称 viewHolder.cityname 中的 id 时,它崩溃了。

class ViewHolder{
    TextView cityName;
    //TextView temperature;
}

【问题讨论】:

    标签: android listview android-custom-view


    【解决方案1】:

    要创建自定义列表视图,您必须这样做:

     @Override @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View vi = view;
    
            if (view == null) {
                vi = inflater.inflate(R.layout.list_item, null);
            }
            inflater = (LayoutInflater) context.getSystemService(Service.LAYOUT_INFLATER_SERVICE);
    
            TextView cityName = (TextView) vi.findViewById(R.id.city_name);
            Data data = citiesData.get(i);
            cityName.setText(data.getCity().getName());
    
    
            return vi;
    

    【讨论】:

      【解决方案2】:

      你得到一个 NPE 也就不足为奇了:

      viewHolder.cityName = (TextView) view.findViewById(R.id.city_name);

      因为在上面的 2 行,您正在测试视图 is 为空。

      你错过了视图的创建:

      view = inflater.inflate(R.layout.YOUR_LAYOUT, parent, false);

      【讨论】:

        【解决方案3】:

        如果视图不为空,你忘了怎么办

        添加以下代码。

         @Override
            public View getView(int i, View view, ViewGroup parent) {
                ViewHolder viewHolder;
                if (view == null){
                    inflater = (LayoutInflater) context.getSystemService(Service.LAYOUT_INFLATER_SERVICE);
                    view = inflater.inflate(R.layout.cities_weather_detail, parent, false);
                    viewHolder = new ViewHolder();
        viewHolder.cityName = (TextView) view.findViewById(R.id.city_name);
                    view.setTag(viewHolder);
                }
            else
        
            {viewHolder = (ViewHolder) view.getTag();
        
            }
        
                    Data data = citiesData.get(i);
                    viewHolder.cityName.setText(data.getCity().getName());
                return view;
            }
        

        如有任何疑问,请随时询问。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-11
          • 1970-01-01
          • 1970-01-01
          • 2016-03-19
          相关资源
          最近更新 更多