我有一个录制声音的应用。录制完声音后,系统会要求用户(AlertDialog)重命名录制的文件。重命名文件后,文件名将添加到.txt文档(存储在Android / data / package_name中)。在第二个活动中,有一个列表视图,项目从此.txt文件添加到列表视图。现在你可能知道我的应用程序是如何工作的,这就是问题所在。
在第二个活动中,我添加了一个OnLongClickListener。如果用户长时间单击ListView中的项目,它将打开一个带有“重命名”选项的菜单。用户键入新名称并按“确定”后,将更改文件名,以及该.txt文件中文件的名称。
问题是ListView没有更新,所以我需要重新启动活动才能更新它。我尝试了很多东西,没有任何作用。
我尝试了一些不同的updateListView方法:
public void updateListView(){
ViewGroup vg = (ViewGroup)findViewById(R.id.mainListView);
vg.invalidate();
}
这一个:
public void updateListView(){
listAdapter.clear();
listAdapter.addAll(recordedFilesArray);
listAdapter.notifyDataSetChanged();
}
我也尝试在按钮点击时调用listAdapter.notifyDataSetChanged(),基本上我能想到的任何地方都无效。查看文件已重命名的唯一方法是重新启动活动。
由于活动位于标签布局内,因此无法重新启动按钮单击活动,如果重新启动,它会自动打开活动#1,而这是活动#2。
实施listAdapter:
listAdapter = new ArrayAdapter<String>(this, com.whizzappseasyvoicenotepad.R.layout.simplerow, recordedFilesArray);
listView.setAdapter(listAdapter);
recordedFilesArray是一个从.txt文件中添加名称的ArrayList
答案 0 :(得分:0)
尝试更新Array
的来源ListView
中的文字。因此,如果ArrayList<String>
包含ListView
项,那么请更新该数组中的String
并致电listAdapter.notifyDataSetChanged()
。
答案 1 :(得分:0)
你需要清除行项目 在listview适配器中使用。 试试这个,
recordedFilesArray.clear();
答案 2 :(得分:0)
尝试在uithread中运行你的代码也许你正在从另一个线程调用这个函数:
runOnUiThread(new Runnable(){
@Override public void run() { *your code of update here }
});
答案 3 :(得分:0)
如果您在LogCat中的某处看到以下错误:
E / AndroidRuntime(9026): android.view.ViewRoot $ CalledFromWrongThreadException:只有 创建视图层次结构的原始线程可以触及其视图
然后它意味着您从后台线程调用notifyDataSetChanged()
。
请注意,必须从UI线程调用notifyDataSetChanged()
。
你可以通过在Runnable
中包含对你发布到UI线程的YOURACTIVITY.runOnUiThread(new Runnable() {
@Override
public void run() {
listAdapter.notifyDataSetChanged();
}
});
}
中的调用来执行此操作:
Activity
显然可以通过引用{{1}}替换YOURACTIVITY。