Как сделать так, чтобы файл исчез один раз, если он был удален на SD-карте Android?
/*Files will be clicked here*/
@Override
protected void onListItemClick(ListView l,View v, final int position, long id){
filePosition=new File(path1.get(position));
System.out.println("File position:"+filePosition);
if(filePosition.isDirectory()){
if(filePosition.canRead())
getDirectories(path1.get(position));
else
{
new AlertDialog.Builder(VideoSDcard.this)
.setIcon(R.drawable.folder)
.setTitle("["+filePosition.getName()+"]folder can't be read!")
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).show();
}
}
else {
AlertDialog.Builder alert=new AlertDialog.Builder(this);
alert.setIcon(R.drawable.folder);
alert.setTitle("Do you want to Delete this File from SD card ?"+" [ "+filePosition.getName()+" ] ");
//.setTitle("["+filePosition.getName()+"]")
alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/*Deleting a File*/
deleteFile(); // here deleting a file
}
private void deleteFile() {
boolean deleted= filePosition.delete();
}
});
Я просматриваю файлы и каталоги с SD-карты. Так что я показываю это с помощью listview. Когда мне не нужен файл на SD-карте, чтобы я мог удалить файл.
Моя проблема в том, что после удаления файла он был полностью удален на SD-карте, но он виден в списке. Я имел ввиду в эмуляторе. После удаления файла из списка он должен исчезнуть.
Например:- У меня есть файл song.mp4 на SD-карте. После того как я удалил этот файл "song.mp4", он больше не должен отображаться в списке.
Как мне это сделать?
2 ответа
Добавить эту строку
adapter.notifyDataSetChanged();
после
deleteFile()
метод в событии onclick.
или же
после этого вызовите ту же активность, используя намерение..
Попробуйте вот так:
adapter = new MyListAdapter(this);
lv = (ListView) findViewById(android.R.id.list);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
AlertDialog.Builder adb=new AlertDialog.Builder(MyActivity.this);
adb.setTitle("Delete?");
adb.setMessage("Are you sure you want to delete " + position);
final int positionToRemove = position;
adb.setNegativeButton("Cancel", null);
adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
MyDataObject.remove(positionToRemove);
adapter.notifyDataSetChanged();
}});
adb.show();
}
});
Вы можете создать функцию для обновления вашего списка данных и вызывать эту функцию сразу после удаления файла из SDCard. Это обновит ваш список элементов. Вы можете вызывать ту же функцию в первый раз для установки списка данных.
ActivityClass.java
ListView listview;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(android.R.id.list);
refreshData();
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
//show your dialogbox here
//and on click of dialog's delete button referesh listview adapter and set it in listview.
.
.
AlertDialog.Builder alert=new AlertDialog.Builder(this);
alert.setIcon(R.drawable.folder);
alert.setTitle("Do you want to Delete this File from SD card ?"+" [ "+filePosition.getName()+" ] ");
//.setTitle("["+filePosition.getName()+"]")
alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/*Deleting a File*/
deleteFile(); // here deleting a file
refreshData();//refersh listItem
}
private void deleteFile() {
boolean deleted= filePosition.delete();
}
}
});
}
public void refreshData(){
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, list);
listview.setAdapter(adapter);
}