3

スパースブール配列のリストビューからチェックされたすべてのアイテムを取得しようとしており、その配列を関数に渡してユーザーにダイアログを表示し、[はい]をクリックすると、スパース配列で選択されたアイテムのデータベースでいくつかの処理を行います。

私が直面している問題は、関数を呼び出す前にスパース配列のサイズを確認すると、正しいサイズが表示されますが、関数を渡すと、呼び出されるとすぐにサイズが 0 になります。なぜそれが起こっているのか。

これが私がやっていることです--->

SparseBooleanArray checkedPositions;
switch (item.getId()) {
    case delete : 
        checkedPositions = listView.getCheckedItemPositions();
        Log.d(TAG, checkedPositions.size());
        confirmDeletion(checkedPositions);
        break;
}

そして、これは私がそれを渡すメソッドです --->

confirmDeletion(final SparseBooleanArray checkedPositions) {
    Log.d(TAG, checkedPositions.size());
}

最初のログでは正しいサイズが得られますが、2 番目のログでは 0 になります。何が問題なのかわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

1

SSCCEがないので、あなたの流れはあなたの考えとは違うと推測できます。ログにスタック トレースを追加して、誰がいつ confirmDeletion() メソッドを呼び出したかを確認できるようにします。

別の提案は、同じオブジェクトを使用することを保証することです。ロギングの toString を追加して、フローのシーケンスを確認し、同じオブジェクトが使用されていることを確認します。結局のところ、同じオブジェクトが同じ結果を返すため、ギャップがあり、別のオブジェクトを使用しているように見えます。

于 2015-05-10T14:32:17.130 に答える