2011-11-16 28 views
5

पकड़ने में सक्षम नहीं है, मैं एंड्रॉइड के लिए बैक बटन ईवेंट को पकड़ने की कोशिश कर रहा हूं। मुझे पता है कि इस बारे में पहले से ही इस बारे में बहुत कुछ है, हालांकि, मेरा कोड दिए गए उदाहरणों के रूप में काम नहीं करता है।एंड्रॉइड बैक बटन ईवेंट

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event){ 
    if(keyCode == KeyEvent.KEYCODE_BACK){ 
     Log.d(TAG, "back key captured"); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

मैं भी इस की कोशिश की:: यहाँ घटना पर कब्जा करने के लिए अपने कोड का टुकड़ा है

@Override 
public void onBackPressed(){ 
    Log.d(TAG, "in onBackPressed"); 
    finish(); 
} 

LogCat से उत्पादन है कि या तो घटना निकाल दिया गया दिखाई नहीं देता। किसी को इसके लिए एक संभावित कारण पता है?

धन्यवाद।

+1

यह सुनिश्चित करने के लिए कि आप विधि में जाएं, अपने परीक्षण से पहले एक लॉग जोड़कर प्रारंभ करें। यदि नहीं, तो सुनिश्चित करें कि आपका व्यू वर्तमान में केंद्रित है। यदि नहीं, तो यह ऑनकी घटनाओं को नहीं मिलेगा। –

+0

पहले उदाहरण में, बैक बटन दबाते समय, डिफ़ॉल्ट व्यवहार होता है? –

उत्तर

15

public void onBackPressed() विधि को ओवरराइड करने का एक और तरीका है। यह अधिक सरल और आसान है।

+0

हमम मैंने अभी कोशिश की और यह काम नहीं किया। मेरा संपादन देखें। – coder

+3

वास्तव में? यह काफी अजीब बात है, आप इसे एक सामान्य गतिविधि से कर रहे हैं और कुछ भी दिखाई नहीं दे रहा है? शायद इसे टोस्ट दिखाने का प्रयास करें जब बैक बटन दबाया जाए, केवल यह जांचने के लिए कि आपके डीबगर में समस्याएं नहीं हैं। – Brian

-1

यहां बताया गया है कि मैंने बैक-कुंजी दबाए गए ईवेंट को कैसे संभाला।

/** 
    * onKeyDown method 
    * 
    * Executes code depending on what keyCode is pressed. 
    * 
    * @param int keyCode 
    * @param KeyEvent 
    *   event KeyEvent object 
    * 
    * @return true if the code completes execution, false otherwise 
    * 
    */ 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) {   
    switch (keyCode) { 
    case KeyEvent.KEYCODE_BACK: 
     Log.d(TAG, "back key captured"); 

     this.onBackPressed(); 

     //You could also use this.moveTaskToBack(true) to return to the Home screen 

     return true; 

    default: 
     return super.onKeyDown(keyCode, event); 
    } 
    }// end onKeyDown 
2

क्या सॉफ्ट कीबोर्ड दिखा रहा है? यह दृश्य आपके कोड को संभाल सकता है इससे पहले इसे खारिज करने के लिए पहले बैक कुंजी को कैप्चर करेगा।

+0

मैं वास्तव में अपने कस्टम कीबोर्ड – coder

+1

देर से बर्खास्त करने के लिए बैक कुंजी का उपयोग करने की कोशिश कर रहा हूं, लेकिन किसी भी अन्य व्यक्ति के लिए जो इस प्रश्न पर ठोकर खा रहा है, http://stackoverflow.com/questions/3940127/intercept-back-button-from- मानक गतिविधि # onBackPressed() दृष्टिकोण काम नहीं करता है, तो सॉफ्ट-कीबोर्ड बहुत उपयोगी हो सकता है। – qix

8

कीबोर्ड ईवेंट प्राप्त करने के लिए, दृश्य में फोकस होना चाहिए। इस प्रयोग के लिए मजबूर करने के लिए:

view.setFocusableInTouchMode(True); 
view.requestFocus(); 
1

यह मेरे लिए काम करता

private long lastBackPressTime = 0; 
    @Override 
public void onBackPressed() { 
    if (this.lastBackPressTime < System.currentTimeMillis() - 4000) { 
     Toast.makeText(this, R.string.backButtonWarning, 4000).show(); 
     this.lastBackPressTime = System.currentTimeMillis(); 
    } else { 
     super.onBackPressed(); 
    } 
} 

हाल ही में iv'e किया गया (आर) एडीटी प्लगइन की वजह से समस्याओं का एक विशाल राशि है कि doest ते apropiate संसाधन फाइल उत्पन्न प्रयोग । तो दो बार जांचें कि आपने अपनी परियोजना को साफ किया है

1

मेरी स्थिति असामान्य हो सकती है, लेकिन मेरे पास एक ही व्यवहार था इसलिए मैंने सोचा कि मैं कक्षा के साथ साझा करूंगा! कारण यह हुआ कि गतिविधि के लिए मेरे ऑनस्यूम() घटना के अंदर, मैं एक और गतिविधि शुरू कर रहा था। यह गतिविधि कभी भी यूआई को प्रदर्शित करने से पहले समाप्त हो रही थी, लेकिन इसका मतलब था कि जब भी उप-गतिविधि समाप्त हो जाती है, तो मेरी मुख्य गतिविधि के लिए "ऑनस्यूम" लगातार कॉल किया जा रहा था, और बैक बटन ईवेंट सभी उप-गतिविधि में गायब होने लगते थे।