5

デバイスに保存されているビデオをリストビューに入力して再生するプログラムを作成しました。また、file.delete 関数を使用してファイルを削除する機能を実装しようとしました。ただし、notifydatasetchange() 関数を使用した後、ファイルは引き続きリストビューに表示されます。さらに、ビデオ ファイルが DCIM フォルダから削除されていることに気付きました。ただし、デバイスのギャラリーに表示されていますが、クリックしても再生できません。ユーザーが [はい] をクリックすると、ユーザーにダイアログ ボックスを表示しているコードの一部を次に示します。削除機能が実行されます。

DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    switch (which){
                    case DialogInterface.BUTTON_POSITIVE:

                         file.delete();
                         adapter.notifyDataSetChanged();
                         //list.setAdapter(adapter);
                         break;

                    case DialogInterface.BUTTON_NEGATIVE:
                        image2.setImageResource(R.drawable.play);
                        flag.setText("play");
                        //No button clicked
                        break;
                    }
                }
            };

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("This Item will be Deleted\nAre you sure?").setPositiveButton("Yes", dialogClickListener)
                .setNegativeButton("No", dialogClickListener).show();


        }// else closes 

なぜそれが起こっているのかわかりません。有益な提案をお願いします...

4

3 に答える 3

1

私は問題を見ていると思います。

ファイルを削除しますが、実際には、対応するArray要素をArrayListAdapterから削除してから、アダプターでnotifyDataSetChangedを呼び出す必要があります。

見る:

アダプターを使用してリストビューを動的に更新します

メディアスキャナーを強制的に再度実行するには、以下を参照してください。

Androidファイルを削除すると、ギャラリーに空のプレースホルダーが残ります

また、次のことも考慮する必要があります。

notifyDataSetChangedの例

于 2011-07-08T09:09:34.263 に答える
0

ファイル ギャラリーを削除しても削除済みとして表示されないため、画像/ビデオ メディアストアを強制的に再スキャンする必要があると思います。私は正しいですか?

この議論を注意深く読んでください

于 2011-07-08T09:37:48.477 に答える
0

特定のフォルダーのファイル名を ArrayList またはある種のリストに追加して、ListView に表示できるようにします。したがって、それが ArrayList の場合、そのファイルを削除すると、つまり file.delete() には次の 2 つのケースがあります。

  1. また、ArrayList から特定の名前を削除してから、notifyDataSetChanged() メソッドを呼び出す必要があります。arraylistname.remove(int インデックス) の使用;

  2. 2番目のケースで、ファイルを削除し、ファイルが特定のフォルダーから正常に削除された場合は、ArrayList をゼロデータで初期化し、すべてのファイル名を ArrayList に再生成するメソッドを再度呼び出してから、notifydatasetChanged メソッドを呼び出す必要があります。ファイルが削除され、特定のフォルダーからファイル名を読み取るメソッドを呼び出す場合にこれを使用すると、削除されたファイルはリストに含まれず、すべてのファイル名をリストに追加して notifydatasetchanged を呼び出すと、ファイルが更新されますリスト。

これがお役に立てば幸いです。

私の主張が理解できなかった場合は、コメントしてください。またはさらに助けが必要です。

于 2011-07-08T09:14:16.650 に答える