2012-06-25 27 views
13

Nói rằng tôi đang trên hoạt động chính của tôi và tôi bắt đầu một hoạt động mớiKiểm tra xem phím quay lại đã được nhấn trong Android chưa?

MainActivity > NewActivity 

Và từ NewActivity tôi bấm lại chìa khóa

MainActivity < NewActivity 

Tôi muốn MainActivity để làm điều gì đó nếu nó được hiển thị sau khi NewActivity được đóng, nhưng không phải khi MainActivity chạy bình thường, chẳng hạn như khi chạy ứng dụng lần đầu tiên. Có ai biết nếu điều này là có thể?

Trả lời

8

Một vài ý tưởng:

  • Bạn chỉ có thể thiết lập một lá cờ trong MainActivity khi nó cháy lên NewActivity.
  • Bạn có thể gọi startActivityForResult từ MainActivity và sắp xếp NewActivity để đặt kết quả mà bạn sẽ nhận được trong MainActivity.onActivityResult() khi kết thúc NewActivity.
+0

Cảm ơn! Tôi đã sử dụng startActivityForResult, hoạt động rất tốt! –

0

Khi bạn bắt đầu NewActivity bạn cần sử dụng startActivityForResult và sử dụng requestId hợp lệ. Như vậy requestId sẽ được trả lại cho bạn onActivityResult sau khi NewActivity kết thúc.

16
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
     Log.d(this.getClass().getName(), "back button pressed"); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

@Update. Nếu bạn muốn được thông báo khi NewActivity kết thúc, bạn phải khởi động nó bằng startActivityForResult (Intent, requestCode). Sau đó, bạn phải ghi đè lênActivityResult() trên MainActivity. Kiểm tra tham số requestcode ở đây, nếu mã trả về bằng mã gửi (khi bạn khởi động childActivity), hãy đặt một số mã để thực hiện công việc kinh doanh của bạn.

int MYCODE=1000; 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Result OK.d. 
    if (requestCode == MYCODE) { 
     // do something good 
    } 
} 
+0

Sẽ không chỉ lắng nghe nếu nút quay lại được nhấn? –

+0

Nếu bạn chỉ muốn nghe nút quay lại, hãy sử dụng các mã được cắt đầu tiên. –

6

Bạn có thể ghi đè lên phương thức BackPressed() trong NewActivity sẽ phát hiện khi nhấn nút quay lại. Và sau đó để thông báo cho MainActivity về nó, bạn có thể gửi một cờ boolean trong một bó để MainActivity phát hiện rằng nó mở sau NewActivity.

Trong NewActivity:

 @Override 
     public void onBackPressed() { 
       boolean fromNewActivity=true; 

     Intent mainIntent = new Intent(view.getContext(), MainActivity.class); 
     Bundle bundleObj = new Bundle(); 
     bundleObj.putString("fromNewActivity", Boolean.toString(fromNewActivity)); 
     mainIntent.putExtras(bundleObj); 
     startActivityForResult(mainIntent, 0); 
      } 

Trong MainActivity trong onCreate() phương pháp:

 Bundle extras = getIntent().getExtras(); 
     boolean fromNewActivity =Boolean.parseBoolean(extras.getString("fromNewActivity")); 

Bây giờ bạn có thể kiểm tra nếu MainActivity được mở ra sau khi NewActivity hay không.

8

Tôi thử phương pháp dưới đây để phát hiện nút quay được nhấn trên thanh tác vụ trong hoạt động bằng phương pháp đầu tiên và phương pháp thứ hai được sử dụng để phát hiện nút phần cứng di động quay lại hoặc nút hoạt động giết.

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

@Override 
public void onBackPressed() { 
    setResult(RESULT_CANCELED); 
    super.onBackPressed(); 
} 
Các vấn đề liên quan