Android 台灣中文網

標題: 如何修改contextMenu title的名稱 [打印本頁]

作者: wind8894    時間: 2012-12-9 22:36
標題: 如何修改contextMenu title的名稱
我有一個字串陣列,有3個字串,把它放到listview顯示出來

然後長按後顯示ContextMenu,他的HeaderTitle要顯示選擇的那個字串名稱

那麼在contextMenu.setHeaderTitle("測試檔案_音樂檔.mp3");   這邊要怎麼做修改呢?
  1. private String[] imgText = {
  2.             "測試檔案_圖片.jpeg", "測試檔案_簡報檔.pptx", "測試檔案_音樂檔.mp3"            
  3.     };

  4. listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {   
  5.                   
  6.             @Override  
  7.             public void onCreateContextMenu(ContextMenu contextMenu, View v,   
  8.                     ContextMenuInfo info) {   
  9.                 // TODO Auto-generated method stub   
  10.                 contextMenu.setHeaderTitle("測試檔案_音樂檔.mp3");                 
  11.                     contextMenu.add(0, 0, 0, R.string.openfile);
  12.                     contextMenu.add(0, 1, 0, R.string.upload);
  13.                      contextMenu.add(0, 2, 0, R.string.addfavorite);
  14.                      contextMenu.add(0, 3, 0, R.string.sharefile);                    
  15.             }     
  16.         });
複製代碼

作者: ploglin    時間: 2012-12-10 09:31
用一個全域的變數就可以了啊?
(是我想的太簡單了嗎?)
作者: wind8894    時間: 2012-12-10 18:35
所以他能夠這樣嗎?
  1. contextMenu.setHeaderTitle(imgText[0]);
複製代碼
??
作者: ploglin    時間: 2012-12-11 09:14
可以呀,只要你的 imgText 是 String array 就沒問題了
作者: wind8894    時間: 2012-12-11 17:32
那我要改成這樣嗎?
  1. for (int i = 0; i < image.length; i++) {
  2.                     contextMenu.setHeaderTitle(imgText[i].toString());
  3.                     contextMenu.add(0, 0, 0, R.string.openfile);
  4.                     contextMenu.add(0, 1, 0, R.string.upload);
  5.                      contextMenu.add(0, 2, 0, R.string.addfavorite);
  6.                      contextMenu.add(0, 3, 0, R.string.sharefile);
  7.                     }
複製代碼

作者: ploglin    時間: 2012-12-11 17:48
我不懂的是為什麼你會有一個 for 迴圈。
header title 是當觸發的時候去異動的,你這樣做只會吃最後一個內容。而且menu會新增很多個?
作者: wind8894    時間: 2012-12-11 17:54
因為我是一個listview,當長按某個listitem時,會跳出ContextMenu

所以會有好多個item,所以才不知道這邊要如何做修改
  1. imgText[].toString()
複製代碼

作者: ploglin    時間: 2012-12-12 09:59
ListView 的話,會用 ArrayAdapter 或 SimpleAdapter
使用 ListView 的 onItemLongClick 會回傳 adapter, view, position id。
在 onItemLongClick 的事件中,利用 position 去取得目前對應的資料,再去異動 title 就可以了
作者: wind8894    時間: 2012-12-12 23:54
這樣會有錯  是這樣改嗎?
  1. imgText[position].toString()
複製代碼
  1. listView.setOnItemLongClickListener(new OnItemLongClickListener() {
  2.             public boolean onItemLongClick(AdapterView<?> adapter, View view, int position, long id) {
  3.             
  4.                     listView.showContextMenu();
  5.             return true;
  6.             }
  7.         });
  8.         listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {   
  9.                
  10.             @Override  
  11.             public void onCreateContextMenu(ContextMenu contextMenu, View v,   
  12.                     ContextMenuInfo info) {   
  13.                 // TODO Auto-generated method stub                      
  14.                     contextMenu.setHeaderTitle(imgText[position].toString());
  15.                     contextMenu.add(0, 0, 0, R.string.openfile);
  16.                     contextMenu.add(0, 1, 0, R.string.upload);
  17.                      contextMenu.add(0, 2, 0, R.string.addfavorite);
  18.                      contextMenu.add(0, 3, 0, R.string.sharefile);
  19.                    
  20.             }   
  21.   
  22.         });
複製代碼

作者: ploglin    時間: 2012-12-13 09:13
wind8894 發表於 2012-12-12 23:54
這樣會有錯  是這樣改嗎?

差不多是這個意思了,不過你可能要跑看看有沒錯誤。
作者: wind8894    時間: 2012-12-13 22:07
在onCreate外設了 int position; 全域變數後,雖然不會報錯了,但不管點哪一項都只會顯示第一個,是哪裡寫錯了呢?
  1. listView.setOnItemLongClickListener(new OnItemLongClickListener() {
  2.             public boolean onItemLongClick(AdapterView<?> adapter, View view, int position, long id) {
  3.             
  4.                     listView.showContextMenu();
  5.             return true;
  6.             }
  7.         });
  8.         listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {   
  9.                
  10.             @Override  
  11.             public void onCreateContextMenu(ContextMenu contextMenu, View v,   
  12.                     ContextMenuInfo info) {   
  13.                 // TODO Auto-generated method stub                       
  14.                     contextMenu.setHeaderTitle(imgText[position].toString());
  15.                     contextMenu.add(0, 0, 0, R.string.openfile);
  16.                     contextMenu.add(0, 1, 0, R.string.upload);
  17.                      contextMenu.add(0, 2, 0, R.string.addfavorite);
  18.                      contextMenu.add(0, 3, 0, R.string.sharefile);
  19.                     
  20.             }   
  21.   
  22.         });
複製代碼

作者: ploglin    時間: 2012-12-14 09:01
onItemLongClick 裡面有一個 position 跟你全域變數的名稱有衝突。
應該是要改成在 onItemLongClick 的 function 中,把 position 的值給全域變的的 position




歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1