2012-08-04 37 views
6

Tôi biết câu hỏi này đã được hỏi nhiều lần trước đây, nhưng bất kỳ giải pháp nào không hoạt động và tình huống của tôi hơi khác một chút.Chuyển đến màn hình chính thay vì Hoạt động trước

Tôi có một số Activity có thể được gọi từ nhiều Hoạt động khác nhau. Nhưng tôi muốn khi người dùng nhấn nút quay lại, thay vì hoạt động trước đó, ứng dụng sẽ chuyển đến Màn hình chính.

Một cách để sử dụng StartActivityFromResult() nhưng sau đó tôi sẽ phải sử dụng nó trong mọi Hoạt động gọi điện.

+0

u có thể giữ nút khi nút nhấn tự động chuyển đến trang hme ... Intent i = new Intent (AccountActivity.this, ContactsActivity.class); startActivity (i); – shassss

+1

"Nhưng tôi muốn khi người dùng nhấn nút quay lại, thay vì hoạt động trước đó, ứng dụng sẽ chuyển đến Màn hình chính" - vì không chắc người dùng * sẽ muốn điều này, tại sao bạn cho rằng đây là hành vi chính đáng? – CommonsWare

+0

hoạt động tôi đang đề cập đến là màn hình trình phát của trình phát nhạc. Tôi muốn khi người dùng chọn một bài hát từ danh sách phát thì ứng dụng sẽ chuyển đến PlayerActivty. Nhưng khi nút quay lại được nhấn từ trình phát thì luồng sẽ chuyển sang màn hình chính hoặc một số ứng dụng khác mà người dùng đã mở trước đó.Hy vọng tôi đã giải thích câu hỏi. – reiley

Trả lời

23

bạn có thể ghi đè lên phương pháp BackPress như sau. Nó sẽ hoạt động.

public void onBackPressed() { 
    Intent startMain = new Intent(Intent.ACTION_MAIN); 
     startMain.addCategory(Intent.CATEGORY_HOME); 
     startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(startMain); 

} 
+0

Thanks..đã hoạt động .. nhưng điều gì sẽ xảy ra nếu ví dụ: Tôi đã sử dụng ứng dụng tin nhắn trước khi ứng dụng của tôi và tôi đăng nhập nhấn phím chủ và sau đó mở ứng dụng của tôi. Bây giờ nếu tôi bấm phím trở lại làm thế nào tôi có thể quay trở lại ứng dụng đã mở trước đó (nhắn tin trong ví dụ này)? – reiley

+0

Nếu bạn biết tên hoạt động và gói ứng dụng thư đó, bạn có thể gọi hoạt động đó từ phương thức onBackpressed của mình. – android

+0

Tôi đã thấy điều này ở những nơi khác mà điều này không được khuyến khích. – Enigma

0

Chỉ cần gửi Intent trực tiếp về nhà. Điều này có thể được thực hiện thông qua việc thiết lập hành động và thể loại của mục đích đó.

Kiểm tra tài liệu về Ý định để biết chi tiết.

-3
 Button btn = (Button) findViewById(R.id.button2); 
     btn.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) 
       { 
      Intent i = new Intent(AccountActivity.this, HomeActivity.class); 
        startActivity(i); 
       } 
      }); 
+0

Điều này không đúng. Không có lớp HomeActivity nào mà bạn có thể gọi. Tham khảo bài đăng của tôi hoặc bài đăng trên @android. – JoxTraex

2

Bạn cũng có thể chỉ cần gọi phương thức finish() về hoạt động.

+0

Tôi sẽ không khuyên bạn nên sử dụng phương pháp này vì 1. Có lẽ hệ điều hành sẽ gọi hàm gọi lại 'onDestroy' của hoạt động sẽ làm hỏng thứ tự lôgic ngăn xếp ngược của bạn. 2. Nếu hoạt động của bạn được gọi bởi một hoạt động khác bằng phương thức 'startActivityForResult', nó sẽ gọi hoạt động gọi lại là' onActivityResult' callback. – Eido95

1

Và thêm vào câu hỏi này nếu bạn không muốn quay lại hoạt động của mình khi bạn nhấn nút quay lại thì chỉ cần finish() bên dưới mã.

public void onBackPressed() { 
    Intent mainActivity = new Intent(Intent.ACTION_MAIN); 
    mainActivity.addCategory(Intent.CATEGORY_HOME); 
    mainActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(mainActivity); 
    finish(); 
} 
0

Nó chỉ đơn giản nếu bạn có một Hoạt động A và bạn thực hiện 3 mảnh như B, C và Home_Fragment. Bây giờ, nếu bạn đang ở trong đoạn B hoặc C và nhấn nút quay lại, bạn muốn di chuyển trên Home_Fragment mỗi lần.
Sau đó, bạn phải chỉ ghi đè lên các phương pháp onBackPressed() trong Hoạt động A và cũng có khi bạn nhảy đến bất kỳ mảnh, sau đó đưa ra một TAG hoặc tên cụ thể, bạn sẽ nhận ra rằng trong đoạn Hoạt động A.

tôi đưa ra Ví dụ bạn có thể dễ dàng hiểu được:

Chuyển từ hoạt động từ A đến C Fragment

if (savedInstanceState == null) { 
    getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new C_fragment(),"xyz").commit(); 
} 

hoặc nếu bạn đang di chuyển từ đoạn B để mảnh C, và trên báo chí trở lại, bạn muốn đến trên Fragment D, làm như dưới đây:

btn.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View view) { 
     getActivity().getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, new C_frament(), "xyz").commit(); 
     ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle("Fragment C"); 
    } 
}); 

Bây giờ bạn phải chỉ ghi đè onBackPressed() phương pháp trong hoạt động chính như sau:

@Override 
public void onBackPressed() { 
    FragmentManager fragmentManager =getSupportFragmentManager(); 

    if (((C_fragment) getSupportFragmentManager().findFragmentByTag("xyz")) != null 
      && ((C_fragment) getSupportFragmentManager().findFragmentByTag("xyz")).isVisible()) { 

     Fragment fragment = new Home_Fragment(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, fragment) 
       .commit(); 
     getSupportActionBar().setTitle("Home fragment "); 

    } else { 
     super.onBackPressed(); 
    } 
} 
Các vấn đề liên quan