0

したがって、カスタム オブジェクトの ArrayList と、ListView を介してコンテンツを表示するためのアダプターがあります。ListView で個別のオブジェクトをクリックすると、小さなアニメーションが展開され、いくつかの追加情報が表示されます。この動作は ArrayAdapter で定義されています (createView() で直接使用すると、アニメーションが思いどおりに動作しなかったためです)。

リストビュー要素の小さな画像 (X- で削除) をクリックすると、アラート ダイアログが表示され、そのアイテムを本当に削除するかどうか尋ねられます。[はい] をクリックすると、arraylist から削除されますが、notifyDataSetChanged(); アダプターを更新せず、フラグメントを非表示にしたことがなく、アラートが発生しただけなので、onResumeまたは同様のものが呼び出されることはありません。

これは私のArrayAdapterの一部である大まかなコードです:

    deleteIcon.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ...
        DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                    case DialogInterface.BUTTON_POSITIVE:
                        ArrayList<Book> XYZ = sharedFunctions.loadSortedArrayList(getContext());
                        XYZ.remove(position);
                        sharedFunctions.saveArrayList(context, XYZ);
                        notifyDataSetChanged();
                        break;
                    case DialogInterface.BUTTON_NEGATIVE:
                        break;
                }
            }
        };
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setMessage("BLABLA").setNegativeButton("Cancel", dialogClickListener).setPositiveButton("Confirm", dialogClickListener).show();
    }
});

では、データが変更されたことを Fragment (タブ) に伝えるにはどうすればよいでしょうか?

編集:したがって、以下の回答は技術的には正しいと思いますが、単にこれをすべて間違っていることがわかりました。アダプターの構築に使用された ArrayList からアイテムを削除するのではなく、ArrayList (SharedPreferences にロード/保存された) からアイテムを削除しました。愚かな間違いです。そこからも削除すると、notifyDataSetChanged() が機能しました。助けてくれてありがとう。-- (ここではかなり新しいので、質問を削除する必要があるかどうかはわかりませんが、今のところこのままにしておきます)。

4

2 に答える 2