【问题标题】:Custom ListView Adapter Null Object Reference自定义 ListView 适配器 Null 对象参考
【发布时间】:2017-03-15 18:56:52
【问题描述】:

不确定这里没有初始化什么,我猜我必须在列表本身上手动创建一个新行,但我什至不知道如何开始。这是我用来创建和调用适配器的代码:

/**
 * Retrieve adapter UI
 *
 * @param position current position with the list
 * @param convertView view
 * @param parent container
 * @return view, UI elements
 */
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {

    final ViewHolder handler = new ViewHolder();

    //start
    View row = convertView;
    if(row == null) {
        LayoutInflater inflator = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflator.inflate(R.layout.fragment_delivery_collect_item, parent, false);

    }
    row.setTag(handler);


    final  Order.Item itemRow = (Order.Item) super.getItem(position);
    if(itemRow != null) {
        handler.mName = (TextView) convertView.findViewById(R.id.item_name);
        handler.mSize = (TextView) convertView.findViewById(R.id.item_size);
        handler.mQty = (TextView) convertView.findViewById(R.id.item_qty);
        handler.mPrice = (TextView) convertView.findViewById(R.id.item_price);

        handler.mName.setText(itemList.get(position).getName());
        if (itemList.get(position).getSize() != null) {
            handler.mSize.setText(itemList.get(position).getSize());
        }
        handler.mQty.setText(itemList.get(position).getQty());
        handler.mPrice.setText(String.format("£%s", itemList.get(position).getPrice()));
    }
    return row;
}

public Boolean cleanAll(){
    try {
        itemList.clear();
        notifyDataSetChanged();
        return true;
    }catch (Exception ex){
        Log.i("cleanAll",ex.getMessage());
        return false;
    }
}

class ViewHolder {
    View mView;
    TextView mName, mSize, mQty, mPrice;
}

我正在尝试使用来自“Order.Item”的信息填充页面上的 4 个 TextView,该类非常简单,但如果您也需要我展示这一点,请询问。

这是我收到的错误消息:

FATAL EXCEPTION: main
Process: uk.ac.plymouth.www.deliveryapplication, PID: 21370
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at uk.ac.plymouth.www.deliveryapplication.adapters.CollectListViewAdapter.getView(CollectListViewAdapter.java:96)

这里是我在片段中创建适配器的地方:

ListView returnedItem = (ListView) rootView.findViewById(R.id.list);
    CollectListViewAdapter adapter = new CollectListViewAdapter(getActivity().getApplicationContext(), R.layout.fragment_delivery_collect_item, true, this);
    for (Order.Item i : currOrder.getITEMS()) {
        adapter.add(i);
    }
    returnedItem.setAdapter(adapter);

【问题讨论】:

    标签: java android xml android-layout listview


    【解决方案1】:

    您的convertView 为空。您没有在 convertView 中分配您的布局视图

    尝试使用你正在使用的行:

    row = inflator.inflate(R.layout.fragment_delivery_collect_item, parent, false);
    

    这样做:

    if(row!= null) {
        handler.mName = (TextView) row.findViewById(R.id.item_name);
        handler.mSize = (TextView) row.findViewById(R.id.item_size);
        handler.mQty = (TextView) row.findViewById(R.id.item_qty);
        handler.mPrice = (TextView) row.findViewById(R.id.item_price);
    

    【讨论】:

    • 谢谢 :) 我觉得我有点糊涂了。
    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多