Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android.widget.AdapterView.getPositionForView上的NullPointerException(AdapterView.java:581)_Android_Android Listview - Fatal编程技术网

android.widget.AdapterView.getPositionForView上的NullPointerException(AdapterView.java:581)

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

我知道这之前已经讨论过了,我搜索了很多结果,但没有一个解决了我的问题

我得到: 空指针异常 位于android.widget.AdapterView.getPositionForView(AdapterView.java:581)

我有一个带有复选框的列表视图。我想要的行为是,在选中一个项目后,它会移动到列表的底部,这样列表会首先显示未选中的项目,然后显示已选中的项目

以下是适配器实现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);
不带线夹。chk.setChecked(prod.isInCart());没有例外,但当用户选中其中一个复选框时,会标记所有复选框

我认为问题在于根据选中状态对列表进行重新排序。 没有它,就没有问题

我考虑过放弃复选框,并使用上下文菜单操作,但我认为重新排序会再次导致这种情况。 如果我想使用ExpandableListView,情况也是如此。一旦发生重新排序,getPositionForView方法将无法在前面的位置找到对象(我的假设,而不是知识)


谢谢

请显示重新订购的代码。您可能需要有一个单独的数组副本来进行重新排序,然后在更新后将数组交换到适配器中。重新排序代码:public void reorder(){Collections.sort(listCurrentProducts);notifyDataSetChanged();}@omerkeynan您有什么解决方案吗?当我拖放一个项目到窗口底部或作为最后一个列表项目时,我面临着同样的问题。@karthikeyan我已经很久没有接触过这个项目了,我不记得我是否解决了这个问题。很抱歉