gpt4 book ai didi

java - 在仍在添加项目时将 onItemClickListener 添加到每个 ListView 项目

转载 作者:行者123 更新时间:2023-11-29 21:37:26 25 4
gpt4 key购买 nike

我不太确定如何解释这个问题,但我会尽力而为。我有一个录制声音的应用程序,完成录制后,您必须重命名文件,然后将文件添加到另一个 Activity 的 ListView 中。

我有选项卡布局,所以将文件添加到 ListView 有点复杂,我是这样做的:

记录 Activity :

if (getParent() instanceof FileNameProvider) {
((FileNameProvider) getParent()).onNewFileName(newFileName);
}

选项卡布局 Activity :

public void onNewFileName(Editable filename) {
LocalActivityManager activityManager = getLocalActivityManager();
getTabHost().setCurrentTabByTag("Library");
RecordedLibrary recLib = (RecordedLibrary) activityManager.getActivity("Library");
recLib.setFileName(filename);
}

最后,我在我的库( ListView ) Activity 中获得了新文件名:

public void setFileName(final Editable filename) {
Log.d("2", "Set filename from first activity " + filename);
}

因此,每次我设置文件名时,它都会自动添加到 ListView 中,代码如下:

public void setFileName(final Editable filename) {
Log.d("2", "Set filename from first activity " + filename);

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

现在我接下来要做的是也为添加的每个项目自动添加 onItemClickListener。我知道我可以用这样的 switch 语句来做到这一点:

switch (position){
case 0:
//code
break;
}

但这在我的情况下是不可能的,因为每次我录制一个文件时,这个文件都有不同的路径,因为有不同的名称。这就是我尝试这样做的方式:

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();
}

});

这也不起作用,因为每次我向 ListView 添加一个新文件时,文件名变量都会改变,所以只要我只向 ListView 添加一个项目,这段代码就可以工作。一旦我将第二个项目添加到 ListView ,无论我单击哪个项目,toast 都会显示第二个文件的名称。

我希望每个人都明白问题所在。让我知道是否应该添加更多信息。

解决方案:

listView.setOnItemClickListener(new OnItemClickListener() {

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

});

如您所见,我只是将“filaname”更改为“fileNames.get(arg2)”,请参阅this answer了解更多详情。

最佳答案

您不应在每次设置文件名时都创建和设置新的 ListAdapter。

适配器在每个生命周期中只应创建一次并附加到 ListView 一次,这可能就是为什么第二次添加文件时只返回第二个文件名的原因。每次调用 setFileName 时,您都会覆盖之前的 Adapter 和数据。

关于java - 在仍在添加项目时将 onItemClickListener 添加到每个 ListView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18080699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com