2012-01-06 2 views
0

я использую ниже код, чтобы показать фотографию в GridView:GridView переименовать имя файла

String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.ImageColumns.DATA}; 
Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Media._ID); 
int count = cursor.getCount(); 
int image_column_index = cursor.getColumnIndex(MediaStore.Images.Media._ID); 
int image_path_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA); 
fd.clearPhonePhoto(); 
int i; 
for(i = 0; i < count; i++) { 
cursor.moveToPosition(i); 
int id = cursor.getInt(image_column_index); 
String p = cursor.getString(image_path_index); 
Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(getApplicationContext().getContentResolver(), id, MediaStore.Images.Thumbnails.MICRO_KIND, null); 
FilePath.add(p); 
FileThumb.add(b); 
} 

b4 = (Button)findViewById(R.id.btn_4); 
b4.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
int i; 
for(i = 0; i < Check.length; i++) { 
if(Check[i]) { 
AlertDialog.Builder renameDialog = new AlertDialog.Builder(PhonePhotoListActivity.this); 
renameDialog.setTitle("Rename"); 
final EditText name = new EditText(AActivity.this); 
name.setText(FilePath.get(i).substring(FilePath.get(i).lastIndexOf("/") + 1)); //set old file name 
renameDialog.setView(name); 
final String oripath = FilePath.get(i); 
renameDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
public void onClick(DialogInterface arg0, int arg1) { 
rename(oripath, name.getText().toString()); 
Intent it = new Intent(AActivity.this, AActivity.class); 
it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 


startActivity(it); 
} 
}); 
renameDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
public void onClick(DialogInterface arg0, int arg1) {} 
}); 
renameDialog.show(); 
} 
} 
} 
}); 
gv = (GridView)findViewById(R.id.phone_photo); 
AAdapter = new AAdapter(this, FilePath, FileThumb); 
gv.setAdapter(AAdapter); 

Выше в OnCreate(). метод, как показано ниже переименования():

public void rename(String ori, String edit) { 
File rename = new File(ori); 
String newpath = ori.substring(0, ori.lastIndexOf("/") + 1) + edit; 
rename.renameTo(new File(newpath)); 
} 

В первый раз, диалоговое окно покажет правильное имя файла и переименовать успех имени файла. Но во второй раз в диалоговом окне отображается старое имя файла, которое не переименовано, и переименовать не удалось. Как изменить, чтобы избежать этого?

Я пытаюсь перезапустить приложение, оно все еще показывает старое имя файла.

ответ

1

вы только изменяете имя файла, , но не изменили имя файла в базе данных, вам необходимо обновить базу данных, чтобы обеспечить переименование.

вы можете попробовать это на свежую базу данных:

Intent scanIntent = new Intent(Intent.ACTION_MEDIA_MOUNTED); 
    scanIntent.setData(Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath()))); 
    context.sendBroadcast(scanIntent); 

смонтирует хранения, а также сканировать носитель.

+0

Где она должна размещаться? – brian

+0

, когда вы закончите переименование, вы можете обновить, но при обновлении вам нужно прочитать новые данные базы данных. – idiottiger

+0

Как читать новые данные базы данных? Я пытаюсь добавить в onCreate сверху. Но после переименования он не обновляется. Но если остановить активность и перезапустить активность. он обновляется. – brian

1

Я думаю, вам нужно перерисовать свой метод Grid View, получив данные из базы данных и вызывая его после переименования и обновления в БД.

Edit:

onCreate(){ 
............... 
............ 
drawGrid(); 
} 


public void getData(){ 
File.clear(); 
Path.clear();  
String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA,    MediaStore.Images.ImageColumns.DATA}; 
Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Media._ID); 
int count = cursor.getCount(); 
int image_column_index = cursor.getColumnIndex(MediaStore.Images.Media._ID); 
int image_path_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA); 
fd.clearPhonePhoto(); 
int i; 
for(i = 0; i < count; i++) { 
cursor.moveToPosition(i); 
int id = cursor.getInt(image_column_index); 
String p = cursor.getString(image_path_index); 
Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(getApplicationContext().getContentResolver(), id, MediaStore.Images.Thumbnails.MICRO_KIND, null); 
FilePath.add(p);  
FileThumb.add(b); 
}} 

public void drawGrid(){ 
getData(); 
gv = (GridView)findViewById(R.id.phone_photo); 
AAdapter = new AAdapter(this, FilePath, FileThumb); 
gv.setAdapter(AAdapter); 
} 

вызов OnDraw() при щелчке AlertDialog "OK"
, и я думаю, что он работает ..

+0

Можете рассказать мне более подробно? – brian

+0

, когда вы переименуете свои файлы, он будет sucessccously переименован. Я прав, если да, тогда вам нужно перерисовать свой GridView. По последним данным, получаемым после переименования. Одна вещь делает отдельный метод получения данных из БД, сначала вы вызываете его методом onCreate(), а затем переименовываете диалог «ОК», а затем делаете ваш GridView снова.Надеюсь, это поможет вам –

+0

Как перерисовать ваш GridView По последним данным после переименования? – brian

Смежные вопросы