更新ListView不起作用

时间:2013-08-21 08:52:40

标签: java android eclipse android-listview

我有一个录制声音的应用。录制完声音后,系统会要求用户(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

4 个答案:

答案 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。