我知道这之前已经讨论过,我搜索了很多结果,但没有一个能解决我的问题。
我得到: android.widget.AdapterView.getPositionForView(AdapterView.java:581) 处的 NullPointerException
我有一个带复选框的 ListView。我想要的行为是,在检查一个项目后,它被移动到列表的底部,列表首先显示未选中的项目,然后显示选中的项目。
以下是 Adapter 实现 getView 的相关部分:
final ViewHolder holder;
if (convertView == null) {
layoutProductItem = new LinearLayout(ctx);
mInflater.inflate(R.layout.product_in_list, layoutProductItem, true);
holder = new ViewHolder();
holder.chk = (CheckBox) layoutProductItem.findViewById(R.id.chk_in_cart);
layoutProductItem.setTag(holder);
} else {
layoutProductItem = (LinearLayout) convertView;
holder = (ViewHolder) convertView.getTag();
}
TextView viewProdName = (TextView) layoutProductItem.findViewById(R.id.txt_prod_name);
TextView viewRequiredQttyName = (TextView) layoutProductItem.findViewById(R.id.txt_required_qtty);
EditText fldQtty = (EditText) layoutProductItem.findViewById(R.id.fld_qtty);
EditText fldPrice = (EditText) layoutProductItem.findViewById(R.id.fld_price);
holder.chk.setOnCheckedChangeListener(checkedChangeListener);
viewProdName.setText(prod.getProduct().getName());
fldQtty.setText("" + prod.getBoughtQuantity());
fldPrice.setText("" + prod.getPricePerSingleItem());
viewRequiredQttyName.setText("" + prod.getRequiredQuantity());
Runnable runnable = new Runnable() {
public void run() {
holder.chk.setChecked(prod.isInCart());
}
};
layoutProductItem.post(runnable);
没有线 holder.chk.setChecked(prod.isInCart()); 也不例外,但是当用户选中其中一个复选框时,所有复选框都会被标记。
我假设的问题是根据检查状态对列表进行重新排序。没有它,就没有问题。
我考虑放弃复选框,并使用上下文菜单操作,但我认为重新排序会再次导致这种情况。如果我想使用 ExpandableListView 也是这种情况。一旦发生重新排序,getPositionForView 方法将不会在前一个位置找到对象(我的假设,不是知识)。
谢谢