React Native接收不到Android事件

問題描述

在一次開發(fā)過程中姥宝,需要將Android中的點擊事件傳給RN端處理,按照例程很快就能寫出發(fā)送事件的代碼斗锭,看起來沒有一點問題的代碼最后發(fā)現(xiàn)RN端接收不到事件由桌,代碼如下:

reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
    getId(),
    "onButtonClick",
    null
);

問題原因

無奈只能拿出以前寫的成功傳遞事件的代碼一條條對,最后發(fā)現(xiàn)竟然是getId()這個方法出了問題帆谍,之前也懷疑過伪朽,但是修改了一下還是出錯,現(xiàn)總結主要有兩點誤區(qū):

  1. 以為getId()返回任意一個數(shù)據(jù)汛蝙,比如0烈涮,就可以達到效果
  2. 以為資源文件R.layout.xx就等于設置了該布局的View的id

錯誤的代碼如下:
1.返回任意一個數(shù)據(jù)

private int getId() {
    return 0;
}

2.返回資源文件作為id

private int getId() {
    return R.layout.ui_test;
}

正是上面兩個誤區(qū)導致了找不出RN端接收不到事件的原因。

解決方案

在知道了誤區(qū)之后窖剑,就知道應該從view中獲取id坚洽,代碼如下:

public class RNLightAppUI extends SimpleViewManager<RelativeLayout> {

    //用字段來保存View和Context
    private View view;
    private ThemedReactContext reactContext;

    ...

    //在初始化時將View和Context初始化  
    @Override
    protected RelativeLayout createViewInstance(ThemedReactContext reactContext) {
        RelativeLayout view = (RelativeLayout) LayoutInflater.from(reactContext).
        inflate(R.layout.ui_test, null);
        this.reactContext = reactContext;
        this.view = view;

        //設置點擊事件
        view.findViewById(R.id.btn).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //發(fā)送事件到RN  
                reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
                    getId(),
                    "onButtonClick",
                    null
                );
            }
        });
    }

    /**
     * 傳遞事件的罪魁禍首,一定要傳this.view.getId()
     */
    private int getId() {
        return this.view.getId();
    }

    //將事件映射到RN端
    @Override
    public Map getExportedCustomDirectEventTypeConstants() {
        return MapBuilder.of(
                "onButtonClick",
                MapBuilder.of("registrationName", "onButtonClick")
        );
    }
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末西土,一起剝皮案震驚了整個濱河市讶舰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌需了,老刑警劉巖跳昼,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肋乍,居然都是意外死亡鹅颊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門墓造,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堪伍,“玉大人锚烦,你說我怎么就攤上這事「苡椋” “怎么了挽牢?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長摊求。 經常有香客問我禽拔,道長,這世上最難降的妖魔是什么室叉? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任睹栖,我火速辦了婚禮,結果婚禮上茧痕,老公的妹妹穿的比我還像新娘野来。我一直安慰自己,他們只是感情好踪旷,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布曼氛。 她就那樣靜靜地躺著,像睡著了一般令野。 火紅的嫁衣襯著肌膚如雪舀患。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天气破,我揣著相機與錄音聊浅,去河邊找鬼。 笑死现使,一個胖子當著我的面吹牛低匙,可吹牛的內容都是我干的。 我是一名探鬼主播碳锈,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼顽冶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了殴胧?” 一聲冷哼從身側響起渗稍,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎团滥,沒想到半個月后竿屹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡灸姊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年拱燃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片力惯。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡碗誉,死狀恐怖召嘶,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情哮缺,我是刑警寧澤弄跌,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站尝苇,受9級特大地震影響铛只,放射性物質發(fā)生泄漏。R本人自食惡果不足惜糠溜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一局荚、第九天 我趴在偏房一處隱蔽的房頂上張望氢妈。 院中可真熱鬧寝杖,春花似錦酬凳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锤悄,卻和暖如春悄雅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铁蹈。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留众眨,地道東北人握牧。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像娩梨,于是被迫代替她去往敵國和親沿腰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容