android.widget.AdapterView.getPositionForView上的NullPointerException(AdapterView.java:581)
我知道这之前已经讨论过了,我搜索了很多结果,但没有一个解决了我的问题 我得到: 空指针异常 位于android.widget.AdapterView.getPositionForView(AdapterView.java:581) 我有一个带有复选框的列表视图。我想要的行为是,在选中一个项目后,它会移动到列表的底部,这样列表会首先显示未选中的项目,然后显示已选中的项目 以下是适配器实现getView的相关部分:android.widget.AdapterView.getPositionForView上的NullPointerException(AdapterView.java:581),android,android-listview,Android,Android Listview,我知道这之前已经讨论过了,我搜索了很多结果,但没有一个解决了我的问题 我得到: 空指针异常 位于android.widget.AdapterView.getPositionForView(AdapterView.java:581) 我有一个带有复选框的列表视图。我想要的行为是,在选中一个项目后,它会移动到列表的底部,这样列表会首先显示未选中的项目,然后显示已选中的项目 以下是适配器实现getView的相关部分: final ViewHolder holder; if (conve
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);
不带线夹。chk.setChecked(prod.isInCart());没有例外,但当用户选中其中一个复选框时,会标记所有复选框
我认为问题在于根据选中状态对列表进行重新排序。
没有它,就没有问题
我考虑过放弃复选框,并使用上下文菜单操作,但我认为重新排序会再次导致这种情况。
如果我想使用ExpandableListView,情况也是如此。一旦发生重新排序,getPositionForView方法将无法在前面的位置找到对象(我的假设,而不是知识)
谢谢请显示重新订购的代码。您可能需要有一个单独的数组副本来进行重新排序,然后在更新后将数组交换到适配器中。重新排序代码:public void reorder(){Collections.sort(listCurrentProducts);notifyDataSetChanged();}@omerkeynan您有什么解决方案吗?当我拖放一个项目到窗口底部或作为最后一个列表项目时,我面临着同样的问题。@karthikeyan我已经很久没有接触过这个项目了,我不记得我是否解决了这个问题。很抱歉