我不太確定如何解釋這個問題,但我會盡我所能。我有一個應用程序可以記錄聲音,並且在完成記錄後,必須重命名文件,然後將文件添加到其他活動的列表視圖中。添加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