0

我目前正在开发一个应用程序来记录声音并将它们保存为 *.mp3 文件。用户录制完声音后,会要求他重命名。用户完成重命名后,该文件将作为whateverTheUserTypedHere.mp3 保存到手机上的某个位置。

我目前在应用程序中实现的内容:

一旦用户设置了文件名,文件名就会被带到第二个活动中(称为“文件名”的变量)。这是制作列表视图的代码:

//global variables
ListView listView;
ArrayAdapter<String> listAdapter;
ArrayList<String> fileNames = new ArrayList<String>();

//this is inside onCreate
listView = (ListView) findViewById (R.id.mainListView);
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, fileNames);

//this is inside the method that is called everytime file is recorded
public void setFileName(final Editable filename) {
    Log.d("2", "Set filename from first activity " + filename);

    fileNames.add(filename.toString());
    listView.setAdapter(listAdapter);

所以这一切都按现在应该的方式工作。每次记录和重命名文件时,它都会在第二个活动中立即添加到 listView。但是这段代码有一个很大的缺陷——listview的状态没有保存,所以每次我关闭应用程序并重新打开它,记录的文件仍然存在于手机的存储中,但listview无处可寻。所以我需要做的是实现一些东西,每次更改时都会保存listview的状态。

我想我能做的:

我在想一个更简单的方法会是别的。而不是在记录时向 listView 添加元素然后保存 listview 的状态,我基本上可以在每次打开活动时构建一个新的 listView。我可以实现一种读取手机上特定目录并且只读取 *.mp3 文件的方法。这样每次打开 listview 活动时,listView 都会根据特定目录中的文件自动“生成”。

我要的是什么:

我是 Android 编程新手,我只做了 2-3 个月。如果人们能给我一些关于我应该做什么的指示,我将不胜感激。我应该保留当前实现的方法,即在记录文件后立即添加 listView 行吗?如果是这样,我将如何保存它的状态/我将如何保存它添加的行?或者实现一个从某个目录读取文件然后在每次打开活动时生成一个列表视图的方法会更容易吗?如果是这样,我真的很感激一些关于如何做到这一点的指示,因为我以前从未做过这样的事情。

谢谢!

4

2 回答 2

1

如果每次打开应用程序时都必须扫描整个存储中的所有 .mp3 文件,这将需要相当长的时间。即使它仅限于特定文件夹,最好自己存储一个包含列表视图的文件。此文件必须存储在您自己的应用程序的边界内,并且必须始终存储在同一位置。如果它不存在,那么您就知道用户是第一次打开您的应用程序。

如果您想要有关 java BufferedWriter 的快速指南,可以在这里找到:http ://www.mkyong.com/java/how-to-write-to-file-in-java-bufferedwriter-example/

于 2013-08-07T21:43:43.737 回答
0

您需要以某种持久形式保存数据。onCreate然后,您应该在第二个活动的方法中检索(或开始检索)它。这可以通过多种方式处理。例如,您可以简单地从存储 .mp3 文件的文件夹中读取每个文件名,构造一个数组,然后ArrayAdapter像当前一样使用 an 。唯一的区别是您将在每次活动开始时读取数据。(这对于正确处理活动生命周期是必要的,例如,当用户简单地重新定向手机时,活动可以被销毁并重新创建。)

与其直接读取文件系统,更好的方法可能是使用数据库或 Android 中可用的其他持久存储机制之一来维护文件名列表。(请参阅指南主题存储选项以及保存数据教程。)我建议使用 SQLite 数据库。设置起来有点麻烦,但它提供了很大的灵活性,Android 提供了很好的类来帮助将数据从数据库带到屏幕上。例如,如果您将活动设置为 a ListActivity,您可以简单地对 中的数据发出查询onCreate,告诉活动管理生成的游标,包装 aSimpleCursorAdapter围绕结果,并告诉活动使用适配器。然后系统将自动负责正确处理所有活动生命周期事件。

有很多材料可以向您展示如何做到这一点。除了上面的链接,还有几个示例项目(上面的链接会参考你),以及网络上几个很好的第三方教程(比如这个)。

于 2013-08-08T03:53:14.017 回答