2

これは以前に議論されたことを知っており、多くの結果を検索しましたが、どれも私の問題を解決しませんでした.

私が得る: 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 メソッドは前の位置にあるオブジェクトを見つけられません (知識ではなく私の仮定)。

ありがとう

4

0 に答える 0