Skip to content

Latest commit

 

History

History
68 lines (58 loc) · 2.58 KB

chapter2.1.md

File metadata and controls

68 lines (58 loc) · 2.58 KB

實作 Native module

實作原生 Toast 功能

我們的目標是要實作一個能在 React Native 專案獨立呼叫 Android Toast 功能的 native module,所以我們需要把邏輯實作在 RNMyAndroidToastModule.java

.
├──android     
├────manifests   
├────java        
├──────com.reactlibrary
├─────────RNMyAndroidToastModule.java	<-- 這裡
└─────────RNMyAndroidToastPackage.java 
├──ios        
├──index.js   
├──package.json
└──README.md
public class RNMyAndroidToastModule extends ReactContextBaseJavaModule {  
  
   private final ReactApplicationContext reactContext;  
  
   // 宣告兩個常數儲存 Toast 的維持時間,以便輸出到 JavaScript
   private static final String DURATION_SHORT_KEY = "SHORT";  
   private static final String DURATION_LONG_KEY = "LONG";  
  
   // 預設建構子  
   public RNMyAndroidToastModule(ReactApplicationContext reactContext) {  
      super(reactContext);  
      // reactContext 是特殊的 Android Context,是當前 React Native app 的上下文物件  
      this.reactContext = reactContext;  
   }  
   // getName() 為必備方法,負責回傳此 library 名稱  
   // 這裡的名稱一經產生後建議不要再修改,容易出問題   @Override  
   public String getName() {  
     return "MyAndroidToast";  
   }  
  
   // 宣告可以在 JavaScript 端可以使用的常數  
   // getConstants() 不是必備方法 // 以 Toast 來說,就是它的維持顯示時間 // Toast.LENGTH\_SHORT / Toast.LENGTH\_LONG   @Override  
   public Map<String, Object\> getConstants() {  
     final Map<String, Object\> constants = new HashMap<>();  
     constants.put(DURATION\_SHORT\_KEY, Toast.LENGTH_SHORT);  
     constants.put(DURATION\_LONG\_KEY, Toast.LENGTH_LONG);  
     return constants;  
  }  
  
   // 在 method 宣告 @ReactMethod 表示該方法將可以被 JavaScript 端存取  
   // 由於 React Native 的 bridge 機制是非同步的,所以回傳必須是 void 
   // 如果需要回傳,必須透過事件機制或是 callback 方法   
	 
   @ReactMethod  
   public void show(String message, int duration) {  
	 // Java <----> JavaScript 參數對應類型:  
	 //        Boolean -> Bool
	 //        Integer -> Number
	 //        Double -> Number
	 //        Float -> Number
	 //        String -> String
	 //        Callback -> function
	 //        ReadableMap -> Object
	 //        ReadableArray -> Array  
	 Toast.makeText(getReactApplicationContext(), message, duration).show();  
 }}