【发布时间】:2017-01-04 04:01:11
【问题描述】:
我有一个文件列表视图,我希望刷新/更新列表视图 当我在 ListView 中重命名文件时。
我的删除部分有效(if (item.getTitle() == getString(R.string.delete)))
但不是 ListView 更新部分 (else if (item.getTitle() == getString(R.string.rename)))
在我重命名一个文件之后。
重命名方法有效 (f.renameTo(to);) 但要查看新名称
ListView 中的文件我必须关闭并重新打开我的应用程序,但我想查看
重命名文件后直接在 ListView 中重命名文件名。
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
pos_glob = info.position;
if (item.getTitle() == getString(R.string.delete)) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.confirm));
builder.setMessage(getString(R.string.really_delete));
builder.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { File f = listAdapter.getItem(pos_glob);
f.delete();
listAdapter.remove(f);
listAdapter.notifyDataSetChanged();
dialog.dismiss();
}
});
builder.setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Do nothing
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
else if (item.getTitle() == getString(R.string.rename))
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
final EditText input = new EditText(this);
input.setInputType(InputType.TYPE_CLASS_TEXT);
builder.setView(input);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
m_Text = input.getText().toString();
File f = listAdapter.getItem(pos_glob);
File directory = new File(Environment.getExternalStorageDirectory(), "my_app_ext_sto_dir");
File to = new File(directory, m_Text+".3gp");
f.renameTo(to);
//It works to colour the renamed ListView entry, but thats only a test and not what I want:
//listAdapter.getItem(pos_glob);
int pos_of_renamed_file_in_list = listAdapter.getPosition(f);
// http://stackoverflow.com/questions/2953381/android-is-it-possible-to-refresh-just-one-item-in-a-listview
View v = lv.getChildAt(pos_of_renamed_file_in_list - lv.getFirstVisiblePosition());
//v.setBackgroundColor(Color.GREEN);
// I commented in and out this commands to test but never reached that the
//File name is updated directly after I renamed a file, I have always to reopen the app
//to see the renamed file name in the ListView:
//v.postInvalidate();
v.invalidate();
lv.invalidateViews();
lv.invalidateViews();
lv.invalidate();
listAdapter.notifyDataSetChanged();
//DM_ListAdapter listAdapter_temp = new DM_ListAdapter(getApplicationContext());
//listAdapter.clear();
//listAdapter = listAdapter_temp;
//lv.setAdapter(listAdapter_temp);
//lv.setAdapter(listAdapter);
//lv.invalidateViews();
//lv.invalidate();
//listAdapter.notifyDataSetChanged();
notifyDataSetChanged_method();
//lv.post();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
重命名文件后,我该怎么做才能直接在 ListView 中看到重命名的文件?
【问题讨论】: