วิธีจัดการปุ่มย้อนกลับในกิจกรรม


141

วิธีจัดการปุ่มย้อนกลับในกิจกรรม? ฉันมีปุ่มบางปุ่ม หากฉันคลิกปุ่มใดปุ่มหนึ่งระบบจะเปลี่ยนเส้นทางไปยังปุ่มที่ฉันต้องการ มันใช้งานได้ดี แต่เมื่อกดปุ่มย้อนกลับมันจะเสร็จสิ้น

วิธีแก้ปัญหานี้. ฉันมีกิจกรรมเดียวสำหรับปุ่มเหล่านั้นทั้งหมด ขอบคุณล่วงหน้า.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {
        return false; //I have tried here true also
    }
    return super.onKeyDown(keyCode, event);
}

ฉันใช้รหัสด้านบนเพื่อจัดการปุ่มย้อนกลับ แต่ใช้งานไม่ได้ เมื่อฉันกดปุ่มย้อนกลับมันจะเกิดขึ้นเอง

คำตอบ:


333

คุณสามารถจัดการได้ดังนี้:

สำหรับ API ระดับ 5 ขึ้นไป

@Override
public void onBackPressed() {
    // your code.
}

เก่ากว่า API 5

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

6
แล้วเศษชิ้นส่วนล่ะ?
Crushman

1
ใช่ใครรู้วิธีทำจากชิ้นส่วน
James Wierzba

3
@ james-wierzba จัดการในกิจกรรมและมอบหมายการประมวลผลไปยังส่วนย่อย
Grigorii Chudnov

19

นอกเหนือจากข้างต้นฉันขอแนะนำเป็นการส่วนตัว

onKeyUp():

Programatically พูด keydown จะยิงเมื่อผู้ใช้สังกัดคีย์แรกแต่มันจะซ้ำขณะที่ผู้ใช้เก็บกุญแจสำคัญในการกดดัน *

สิ่งนี้ยังคงเป็นจริงสำหรับทุกแพลตฟอร์มการพัฒนา

ฝ่ายพัฒนาของ Google แนะนำว่าหากคุณกำลังดักจับปุ่ม BACK ในมุมมองคุณควรติดตาม KeyEvent ด้วย starttracking เมื่อ keydown จากนั้นเรียกใช้ด้วย keyup

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** Your Code ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

16

สำหรับทั้งปุ่มย้อนกลับของอุปกรณ์ฮาร์ดแวร์และปุ่มซอฟต์โฮม (ย้อนกลับ) เช่น "<-" นี่คือสิ่งที่เหมาะกับฉัน (* หมายเหตุฉันมีแถบแอป / แถบเครื่องมือในกิจกรรม)

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            //finish();
            onBackPressed();
            break;
    }
    return true;
}



@Override
public void onBackPressed() {
   //Execute your code here
   finish();

}

ไชโย!


ฉันใช้เสร็จแล้วและไม่ย้อนกลับไปที่กิจกรรมก่อนหน้านี้
Si8

2
"เสร็จสิ้น ()" ปิดกิจกรรมปัจจุบันของคุณเท่านั้น คุณต้องจัดการกลับไปที่กิจกรรมก่อนหน้าโดยใช้ความตั้งใจ Btw กิจกรรมก่อนหน้าของคุณควรยังคงเปิดอยู่หากคุณไม่ "เสร็จสิ้น ()" เมื่อนำทางจากก่อนหน้านี้
S bruce

ฉันกำลังทดสอบบางอย่างและจะอัปเดตให้คุณทราบ ขอบคุณสำหรับการตอบกลับ
Si8

1
เพียงใช้ super.onBackPressed () แทนการจบ ()
b00n12

9

วิธีที่ง่ายกว่าคือการจับกดปุ่มย้อนกลับและเรียก moveTaskToBack (จริง) ดังนี้:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Android 2.0 เปิดตัวเมธอด onBackPressed ใหม่และคำแนะนำเหล่านี้เกี่ยวกับวิธีจัดการปุ่มย้อนกลับ


9

คุณควรใช้:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        // Take care of calling this method on earlier versions of
        // the platform where it doesn't exist.
        onBackPressed();
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    // This will be called either automatically for you on 2.0
    // or later, or by the code above on earlier versions of the
    // platform.
    return;
}

ตามที่กำหนดไว้ที่นี่: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

หากคุณใช้เวอร์ชันเก่าในการคอมไพล์โค้ดให้แทนที่ android.os.Build.VERSION_CODES.ECLAIR ด้วย 5 (คุณสามารถเพิ่ม int ส่วนตัวชื่อ ECLAIR เป็นต้น)


2

นี่เป็นวิธีง่ายๆในการทำบางสิ่ง

    @Override
        public void onBackPressed() {
            // do what you want to do when the "back" button is pressed.
            startActivity(new Intent(Activity.this, MainActivity.class));
            finish();
        }

ฉันคิดว่าอาจจะมีวิธีที่ละเอียดกว่าในการดำเนินการ แต่ฉันชอบความเรียบง่าย ตัวอย่างเช่นฉันใช้เทมเพลตด้านบนเพื่อให้ผู้ใช้ออกจากระบบแอปพลิเคชันจากนั้นกลับไปที่กิจกรรมอื่นที่ฉันเลือก


1

สิ่งนี้ช่วยฉันได้ ..

@Override
public void onBackPressed() {
    startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();
}

หรือ????? แม้ว่าคุณจะสามารถใช้สิ่งนี้สำหรับการสลับลิ้นชักได้ด้วย

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
        startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();

}

หวังว่านี่จะช่วยคุณได้ .. :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.