2

这是我的应用程序的工作方式。用户录制一个声音,然后给它一个特定的名字。在本例中,我将录制两个声音文件。测试1.mp3 和测试2.mp3。第一次录制完成后,会出现一个对话框,我输入“Test1”,第二次录制也是如此。Test1.mp3 和 Test2.mp3 现在已添加到列表视图中。这是代码:

//filename is a variable for the name of the file, these lines execute everytime I record a new file
ArrayList<String> fileNames = new ArrayList<String>();
fileNames.add(filename.toString()); 
listView = (ListView) findViewById (R.id.mainListView);
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, fileNames);
listView.setAdapter(listAdapter);

因此,在我记录了这两个文件并将它们添加到 listview 之后,我想将 onClickListeners 设置为两个 listview 元素。但是我该怎么做呢?如何使每次新的录制文件添加到列表视图时,它也会自动生成 onclick 方法。这不会那么复杂,但是每个录制的文件当然都有不同的路径。

现在的代码:

//LISTVIEW
    fileNames.add(filename.toString()); //adding each filename to ArrayList<String>
    listView = (ListView) findViewById (R.id.mainListView);
    listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, fileNames);
    listView.setAdapter(listAdapter);

    listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            Toast toast = Toast.makeText(getApplicationContext(), filename, Toast.LENGTH_SHORT);
            toast.show();
        }

    });

这是每次记录新文件时执行的代码

4

2 回答 2

4

您不必在每次向列表中添加元素时都添加新的侦听器。可以OnItemClickListener一劳永逸地使用一个集合,在回调函数中就能找到被索引点击过的item

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3)

也就是参数int position

在 onItemClick 实现中,您可以检索已单击的元素

arg0.getItemAtPosition(position)

此外,您不必每次都添加 onItemClickListener,只需在 Activity 的 onCreate 方法中准备一次即可,永远不要更改它。

当您的新文件记录终止时,您需要做的是制作一个新适配器(或向适配器添加新项目)。

我准备了一个几乎完整的示例来展示如何使用 ListView:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ArrayList<String> fileNames = new ArrayList<String>();
    fileNames.add("Test1.mp3");
    fileNames.add("Test2.mp3");

    final ListView listView = (ListView) findViewById (R.id.mainListView);
    ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, fileNames);
    listView.setAdapter(listAdapter);

    listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
            Toast toast = Toast.makeText(getApplicationContext(), 
                    (String)arg0.getItemAtPosition(position), Toast.LENGTH_SHORT);
            toast.show();   
        }
    });
}

如果列表中的项目没有改变,这就足够了。

当您的下一个 mp3 文件的录制终止,并且您想将一个项目添加到列表中时,您可以这样做:

ListView listView = (ListView) findViewById (R.id.mainListView);
fileNames.add("Test3.mp3");
((ArrayAdapter<String>)listView.getAdapter()).notifyDataSetChanged();

将“Test3”替换为新录制的 mp3 文件名,它将显示在列表中。

于 2013-08-06T00:49:20.377 回答
0
listview.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

   switch(position){
    case 0:
    blablbla
    break;
    case1 1:
    blabla
    break;
    /....
    }
    }):
于 2013-08-06T00:37:09.300 回答