2016-03-30 16 views
1

0.18 sürümünde bir React Native uygulamasına sahibim ve Android için geri düğmesi işlevselliğini uygulamaya çalışıyorum. Benim index.android.js aşağıdaki kodu vardır:BackAndroid hardwareBackPress dinleyicisi, başlangıç ​​rotasına dönüldükten sonra çalışmayı durdurur

let navigator; 

BackAndroid.addEventListener('hardwareBackPress',() => { 
    if (navigator && navigator.getCurrentRoutes().length > 1) { 
    navigator.pop(); 
    return true; 
    } 
    return false; 
}); 

Ve de benim işlemek:

<Navigator 
    ref={(nav) => { navigator = nav; }} 
    ... 

Ben ileriye yollarının herhangi bir sayıda giderseniz geri düğmesi çalışıyor ve ben o zaman herhangi bir sayıda geri gidebilir başlangıç ​​rotasına giden yollar. Ancak, başlangıç ​​rotasına geri döndükten sonra, JS'yi yeniden yükleyene veya uygulamayı yeniden başlatana kadar arka düğme çalışmayı durdurur.

Bunu başka biriyle karşılaştı mı ve çözüm nedir?

Düzenleme: Ben 0.21, 0.22 ve 0.23-rc3 üzerinde test ettik ve hala bu sürümü en son sürümde yaşıyorum.

+0

Çok benzer bir kod parçam var ve bu kodla, başlangıç ​​düğmesi ilk uygulamada tüm uygulamadan çıkar. Amaç bu muydu? – zvona

+0

Biraz. Uygulamayı başlatırsam, hemen geri düğmesini tıklarsanız uygulamadan çıkar. Ancak, uygulamayı başlatırsam, herhangi bir rotaya gidersiniz, ardından geri düğmesini tıklar, tekrar geri düğmesini tıklarsanız uygulamadan çıkmaz ve tekrar başka bir rotaya geçersem, geri düğmesini tıklamak beni geri almayacaktır İlk rotayı da olması gerektiği gibi. – NeuroXc

+0

Esasen, dinleyiciye, ilk rotaya geri döndükten sonra dinlemeyi kesmesi gibi. İşleyiciye bir konsol.log koyarsam, ilk rotaya geri döndükten sonra geri tıkladığınızda da tetiklenmez. – NeuroXc

cevap

0

Bu sorun, uygulamanın diğer bileşenlerinde, klavyeyi açarken değişen düzenleri işlemek için olay işleyicileri ekledik ve bu bileşenlerin bağlantısını keserken, DeviceEventEmitter.removeAllListeners() numaralı telefonu arıyorduk. Sezgiye aykırı olarak, bu çağrı, başlatıcı bileşen ne olursa olsun, tüm dinleyicileri küresel olarak kaldırır ve DeviceEventEmitter yerine BackAndroid aracılığıyla başlatılan dinleyiciler için bile geçerlidir. Böylece, klavye geçişli bir düzeni olan bir bileşenden geri döndükten sonra, hardwareBackPress dinleyici de kaldırıldı ve geri düğmesi çalışmaz. yapmak, daha spesifik olarak ör. DeviceEventEmitter.removeAllListeners('keyboardWillShow'); bu sorunu çözdü.

+0

OP ile aynı sorunu yaşıyorum ancak kodumda 'DeviceEventEmitter.removeAllListeners()' kullanmıyorum. Bu davranışa başka ne sebep olabilir? – Romy

İlgili konular