2011-05-06 76 views
1

如何檢測長按ListField組件?Blackberry:檢測長按ListField並顯示菜單

你重寫其navigationClick(INT狀態,詮釋時間)和其時間參數摸索(如何?),或者是有長期檢測點擊一些內置的方法?

更重要的是 - 一旦您檢測到這種點擊,您如何顯示菜單(屏幕中間的那個)?

背景是,我想讓用戶編輯選定的項目。並且在長時間點擊時,我想在屏幕中間顯示一個菜單來提供輔助任務:刪除項目,更改項目顯示順序等。

以下是我當前的測試代碼 - src \ mypackage \ MyList的.java

enter image description here

package mypackage; 

import java.util.*; 
import net.rim.device.api.collection.*; 
import net.rim.device.api.collection.util.*; 
import net.rim.device.api.system.*; 
import net.rim.device.api.ui.*; 
import net.rim.device.api.ui.component.*; 
import net.rim.device.api.ui.container.*; 
import net.rim.device.api.ui.decor.*; 
import net.rim.device.api.util.*; 

public class MyList extends UiApplication { 
    public static void main(String args[]) { 
     MyList app = new MyList(); 
     app.enterEventDispatcher(); 
    } 

    public MyList() { 
     pushScreen(new MyScreen()); 
    } 
} 

class MyScreen extends MainScreen { 
    ObjectListField myList = new ObjectListField() { 
     protected boolean navigationClick(int status, int time) { 
      System.err.println("XXX status=" + status + ", index=" + getSelectedIndex()); 
      return true; 
     } 
    }; 

    public MyScreen() { 
     setTitle("How to detect long click?"); 
     myList.set(new String[] { "Item 1", "Item 2", "Item 3", "Item 4", }); 
     add(myList); 
    } 
} 

謝謝 亞歷

回答

0

你可以重寫你的場touchEvent方法。然後做這樣的事情:

ObjectListField myList = new ObjectListField() { 
     long touchedAt = -1; 
     long HOLD_TIME = 2000; // 2 seconds or whatever you define the hold time to be 
     protected boolean touchEvent(TouchEvent message) { 
      if(message.getEvent() == TouchEvent.DOWN) { 
       touchedAt = System.currentTimeMillis(); 
      } else if(message.getEvent() == TouchEvent.UP) { 
       if(System.currentTimeMillis() - touchedAt < HOLD_TIME) 
        touchedAt = -1; // reset 
       else 
        //write logic you need for touch and hold 
      } 
      return true; 
     } 
    }; 

請注意,這是一個粗略的實施,只是爲了給你一個想法。我只用這裏的時間座標。您的實施可能需要考慮用戶觸摸屏幕的X和Y座標,因爲如果他移動了手指,那麼這不會是觸摸,並且保持

+0

謝謝,我如何顯示中間的上下文菜單? – 2011-05-06 13:06:40

+0

試試這個:http://www.blackberry.com/developers/docs/4.7.0api/net/rim/device/api/ui/component/Menu.html#show() – Mugur 2011-05-06 13:51:38

+0

謝謝你指點我進入正確的方向。儘管我已經結束了使用TouchGesture.HOVER。我還沒有想出如何在屏幕中心顯示菜單 - 當我運行菜單(0)時,它出現在右上角.... – 2011-05-08 16:34:08