我不确定如何解释这个问题,但我会尽力而为。我有一个录制声音的应用程序,完成录制后,您必须重命名文件,然后将文件添加到另一个活动的列表视图中。
我有选项卡布局,所以将文件添加到列表视图有点复杂,我是这样做的:
录制活动:
if (getParent() instanceof FileNameProvider) {
((FileNameProvider) getParent()).onNewFileName(newFileName);
}
选项卡布局活动:
public void onNewFileName(Editable filename) {
LocalActivityManager activityManager = getLocalActivityManager();
getTabHost().setCurrentTabByTag("Library");
RecordedLibrary recLib = (RecordedLibrary) activityManager.getActivity("Library");
recLib.setFileName(filename);
}
最后,我在我的库 (listview) 活动中获得了新文件名:
public void setFileName(final Editable filename) {
Log.d("2", "Set filename from first activity " + filename);
}
因此,每次我设置文件名时,它都会使用以下代码自动添加到列表视图中:
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();
}
});
这也不起作用,因为每次我向列表视图添加一个新文件时,文件名变量都会更改,所以只要我只向列表视图添加一个项目,此代码就可以工作。一旦我将第二个项目添加到列表视图,无论我单击哪个项目,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)”,有关更多详细信息,请参阅此答案。