java - 为每个 ListView 元素设置 onClickListener

标签 java android eclipse android-listview

这是我的应用程序的工作原理。用户录制声音,然后给它指定一个名称。在此示例中,我将录制两个声音文件。 Test1.mp3 和 Test2.mp3。第一次录制完成后,会出现一个对话框,我输入“Test1”,第二次录制也是如此。 Test1.mp3 和 Test2.mp3 现已添加到 ListView 中。这是代码:

//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 元素。但我该怎么做呢?如何使每次将新录制的文件添加到 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();
        }

    });

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

最佳答案

每次向列表添加元素时,您不必添加新的监听器。 你可以使用一个OnItemClickListener设置一劳永逸,你将能够在回调函数中找到索引被点击的item

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

即参数intposition

在 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 的文件名,它将显示在列表中。

关于java - 为每个 ListView 元素设置 onClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18069943/

相关文章:

java - 雇员、名字、姓氏和 ID

eclipse - 远程调试Jetty(无mvn,无插件)

java - 附加图像时 TextView 的资源 ID 错误

java - Eclipse 中 Java Maven 模块的行为不一致

java - 为什么 Java 8 有 Arrays.parallelSort() 但没有 Collections.parallelSort()?

java - 发送电子邮件的问题 sendgrid

java - 如何使用驼峰聚合将一条消息聚合到多个组中?

android - DialMyApp 如何在 Android 设备上运行?

android - 如何从表中读出两列并将它们相乘?

Android Studio 和 Gradle,@NotNull 参数的参数 0