आप Activity
में onKeyDown()
विधि ओवरराइड करने के लिए किया है।
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
myViewPager.setCurrentItem(0, true);
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
यह "बैक" बटन प्रेस इवेंट कैप्चर करेगा और उपयोगकर्ता को ViewPager में पहले आइटम पर भेज देगा।
ViewPager#getCurrentItem() भी है जिसका उपयोग उपयोगकर्ता द्वारा स्वाइप किए जाने पर ही वापस जाने के लिए किया जा सकता है। इस तरह के एक कार्यान्वयन:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && myViewPager.getCurrentItem() == 1) {
myViewPager.setCurrentItem(0, true);
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
उपयोगकर्ता को पिछले पृष्ठ पर वापस भेज दिया जाएगा यदि उपयोगकर्ता अगले पृष्ठ पर था। अन्यथा, यह सामान्य रूप से "बैक" पंजीकृत करेगा और उपयोगकर्ता उम्मीद के अनुसार बाहर निकल जाएगा।
आप उस मामले को चाहते हैं जिसमें उपयोगकर्ता पिछले पृष्ठ पर वापस जाता है (मान लें कि आपके पास दो से अधिक पृष्ठ हैं)। इस मामले में, आप ViewPager.OnPageChangeListener() को कार्यान्वित करना चाहते हैं और onPageSelected(int position)
को हर बार स्थिति को सहेजना चाहते हैं। यदि आप उन्हें एक स्टैक में लागू करते हैं, तो जब भी उपयोगकर्ता "बैक" दबाता है तो आप उन्हें पॉप कर सकते हैं। एक बार ढेर खाली हो जाने के बाद, ऐप से बाहर निकलें।
संपादित
के रूप में सही ढंग से जेड Byfield, यह करने के लिए गतिविधि में onBackPressed()
उपयोग करने के लिए किया जाएगा एक से थोड़ा आसान तरीका द्वारा टिप्पणी में कहा गया है। यह केवल एपीआई स्तर 5+ में काम करेगा।
@Override
public void onBackPressed() {
if(i_dont_want_to_leave) {
myViewPager.setCurrentItem(0, true);
} else {
super.onBackPressed(); // This will pop the Activity from the stack.
}
}
क्या वह बैकप्रेस पर भी ओवरराइड कर सकता था? या यह केवल पूर्व एपीआई के लिए है? –
पर आधारित KeyDown() प्रत्येक प्लेटफ़ॉर्म API स्तर 1+ पर काम करता है। इसके अलावा, जब तक कि मैं इसे सभी गलत तरीके से उपयोग नहीं कर रहा हूं, पर बैकप्रेस किए गए गतिविधि को स्टैक से पॉप किए जाने से नहीं रोकेगा। यदि आप 'केडडाउन()' पर 'सत्य' वापस करते हैं, तो यह एकमात्र चीज होगी जो घटित होती है और घटना कैस्केडिंग बंद कर देगी। – DeeV
रुको। बस एक मस्तिष्क डंप था। हां। यदि वह एपीआई 5+ को लक्षित करना चाहता है तो वह बैकप्रेसेड() पर उपयोग कर सकता है। बस 'super.onBackPressed()' को कॉल न करें जबतक कि आप पूरी तरह से सुनिश्चित नहीं हैं कि आप बाहर निकलना चाहते हैं। – DeeV