0

私のコンテキストメニューの削除呼び出しは次のとおりです。

    @Override
    public boolean onContextItemSelected(MenuItem item) {

        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                .getMenuInfo();
        int clickedPosition = info.position;
        tvInt = reviews.get(clickedPosition);

        switch (item.getItemId()) {
        case R.id.Delete:

            new DeleteCommentTask().execute();

            reviews.remove(clickedPosition);
            adapter.notifyDataSetChanged();

            Toast.makeText(getActivity(), "Review Deleted",
                    Toast.LENGTH_SHORT).show();

            return true;

        }
        return false;

    }

私の DeleteCommentTask で、データベースからコメントが削除されることを確認します。しかし、ListView が更新されていませんか?

更新:これが私が使用しているアダプターです:

            MyReviewObject co = new MyReviewObject[reviews.size()];
            int index = 0;

            for (@SuppressWarnings("unused")
            String i : reviews) {
                co[index] = new MyReviewObject(datelist.get(index),
                        reviews.get(index), items.get(index),
                        cats.get(index));
                index++;
            }

            adapter = new MyReviewAdapter(getActivity(), co);
            setListAdapter(adapter);
4

2 に答える 2

1

更新された回答を参照してください

これをしないでください

reviews.remove(clickedPosition);

アダプターの getView で使用されていたデータ ソースからコメントを削除するだけです。文字列の Arraylist から言います。

この後、アダプターに通知するだけでうまくいきます

DeleteCommentTask の onPostExecute でこのコードを実行してみてください

adapter.notifyDataSetChanged();
Toast.makeText(getActivity(), "Review Deleted", Toast.LENGTH_SHORT).show();

削除する位置を通知する DeleteCommentTask の Execute メソッドに引数を渡してみてください。

于 2012-09-30T17:12:56.187 に答える
0

これが機能しない理由は、「co配列のアイテムを削除/削除する必要があります。これは不可能/推奨されていませんArrayList。アダプタで「MyReviewObject」を使用してください。

ArrayList動的に縮小できるを使用する必要がありますが、配列は縮小できません。また、1つの文字列を削除していましたArrayList。私のArrayオブジェクトの中には複数のArrayListがあります。 したがって、代わりにオブジェクト全体を削除する必要があります

于 2012-10-09T16:57:12.133 に答える