我不太确定如何解释这个问题,但我会尽我所能。我有一个应用程序可以记录声音,并且在完成记录后,必须重命名文件,然后将文件添加到其他活动的列表视图中。添加onItemClickListener到每个列表视图项目,而项目仍然被添加
我有标签的布局,所以将文件添加到列表视图是更复杂一点,这里就是我如何做到这一点:
录制活动:
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);
}
最后,我得到我的库(列表视图)活动中的新文件名:
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中,无论我点击哪个项目,toast都会显示第二个文件的名称。
我希望大家都明白这个问题。让我知道是否应该添加更多信息。
SOLUTION:
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更多的细节。
正确,并且在onItemClick中,您将“文件名”写入未由回调传递的Toast(我不知道从哪里得到),但是应该检查位置(arg2),然后获取来自适配器中相应数据的文件名 – jpm
将其设置为'onCreate' –
@AlexFu对不起,我刚刚删除了我的评论,因为我刚刚在答复之前做了一分钟,但该应用程序仍以同样的方式工作。我试图做jpm告诉我现在要做的事情,但我不知道如何实现这一点。我如何检查位置(arg2)并以这种方式获取文件名? – Guy