2012-02-05 28 views
5

Tôi đang có hai hoạt động (activity1 và activiy2) và mỗi hoạt động có một nút mỗi hoạt động. Trong activity1 tôi có một spinner với vài lựa chọn. Giả sử tôi đang chọn tùy chọn 2 từ trình quay số này và tôi đang nhấp vào nút trong hoạt động1, sau đó activity2 bắt đầu. Khi tôi nhấp vào nút hoạt động trở lại1 được tiếp tục và tùy chọn tương tự 2 là hiển thị (như tôi cần). Bây giờ vấn đề là nếu activity2 của tôi được bắt đầu và tôi đang nhấp vào một nút trong đó, activity1 được bắt đầu. Nhưng thay vì nối lại trạng thái hoạt động trước đó1, nó bắt đầu theo cách mà nó vừa tạo và lựa chọn trước đó bị thay đổi. Làm thế nào tôi có thể nhận được cơ sở tương tự như nút quay lại (không phải là cơ sở quay trở lại hoạt động trước đó, tôi có nghĩa là tự động nối lại trạng thái trước đó của bất kỳ hoạt động nào) ngay cả khi tôi bắt đầu lại hoạt động. Đơn giản chỉ cần tôi biết làm thế nào để duy trì trạng thái trước đó của một hoạt động nếu nó được truy cập một lần nữa.Cách duy trì trạng thái trước đó của hoạt động

Đó là với mã này tôi đi từ một hoạt động khác khi button được click:

Intent intent=new Intent(); 
intent.setClassName(getApplicationContext(),"com.myapp.activityname"); 

startActivity(intent); 

Vui lòng giúp đỡ tôi.Tôi là một người mới bắt đầu trong android, vì vậy nếu có ai đưa ra câu trả lời xin vui lòng giải thích nó một chút. Cảm ơn bạn trong adavnce

+0

Tài liệu về điều này có tại đây: http://developer.android.com/reference/android/app/Activity.html –

Trả lời

9

Hãy suy nghĩ tôi đã tìm thấy câu trả lời. Hãy để tôi nói những gì tôi đã làm theo những từ đơn giản,

Giả sử tôi có hai hoạt động activity1 và activity2 và tôi đang điều hướng từ activity1 đến activity2 (tôi đã thực hiện một số hoạt động trong activity2) và một lần nữa quay lại hoạt động 1 bằng cách nhấp vào một nút trong activity1. Bây giờ ở giai đoạn này tôi muốn trở lại hoạt động2 và tôi muốn xem hoạt động của mình2 trong cùng điều kiện khi tôi còn lại hoạt động2.

Đối với kịch bản trên những gì tôi đã làm là trong manifest tôi đã thực hiện một số thay đổi như thế này:

<activity android:name=".activity2" 
      android:alwaysRetainTaskState="true" 
      android:launchMode="singleInstance"> 
</activity> 

Và trong activity1 trên sự kiện nhấn nút tôi đã làm như thế này:

Intent intent=new Intent(); 
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
intent.setClassName(this,"com.mainscreen.activity2"); 
startActivity(intent); 

Và trong activity2 trên sự kiện nhấn nút tôi đã làm như thế này:

Intent intent=new Intent(); 
intent.setClassName(this,"com.mainscreen.activity1"); 
startActivity(intent); 

Bây giờ những gì wil l xảy ra là bất kỳ thay đổi nào chúng ta đã thực hiện trong activity2 sẽ không bị mất, và chúng ta có thể xem activity2 trong cùng trạng thái như trước đây.

Tôi tin rằng đây là câu trả lời và điều này phù hợp với tôi.

+0

Vui lòng ngừng đăng câu trả lời này nhiều lần. Nếu bạn tìm thấy câu hỏi trùng lặp, hãy gắn cờ chúng như vậy. – Mat

3

Bằng cách ghi đè một hoạt động của Trình xử lý sự kiện onSaveInstanceState, bạn có thể sử dụng tham số Bundle của nó để lưu các giá trị mẫu. Dưới đây là một ví dụ:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    // Retrieve the View 
    TextView myTextView = (TextView)findViewById(R.id.myTextView); 
    // Save its state 
    outState.putString("My text", 
    myTextView.getText().toString()); 
    super.onSaveInstanceState(outState); 
} 

Các Bundle lưu được truyền vào onRestoreInstanceStateonCreate phương pháp nếu ứng dụng được buộc phải khởi động lại trong một phiên. Sau đó, bạn có thể trích xuất các giá trị từ Gói và sử dụng các giá trị đó để cập nhật trạng thái Phiên bản hoạt động. Dưới đây là một ví dụ:

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 
    TextView myTextView = (TextView)findViewById(R.id.myTextView); 
    String text = “”;  
    if (icicle != null && icicle.containsKey("My text")) { 
     text = icicle.getString(TEXTVIEW_STATE_KEY); 
    } 
    myTextView.setText(text); 
} 

Điều quan trọng là phải nhớ rằng onSaveInstanceState được gọi là chỉ khi một Hoạt động không hoạt động, nhưng không phải khi nó đang được đóng bởi một cuộc gọi đến finish hoặc bởi người dùng nhấn nút Back.

+0

Một chút giải thích, vui lòng –

+0

xem câu trả lời được cập nhật. –

+0

về toàn bộ trạng thái của hoạt động trước đó. Ý tôi là hoạt động đó nằm ở mặt đất, có cách nào đơn giản để đưa nó trở lại phía trước. Tôi có nghĩa là nếu nhiều chủ đề đang chạy trong hoạt động đó, tôi tin rằng lựa chọn tốt nhất là mang nó ở phía trước. –

0

Tải source code hoặc xem the entire post

Đối với hoạt động một, bạn cần phải sử dụng chức năng startActivityForResult() trả về giá trị cho hoạt động cha mẹ mà là hoạt động một.

Intent intent = new Intent(MainActivity.this, Activity2.class); 
    startActivityForResult(intent, 1); 

Và để nhận được các giá trị từ hoạt động hai mà không làm sai hoạt động một, thêm đoạn mã sau

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if (requestCode == 1) { 
       if(resultCode == RESULT_OK){ 
        String text=data.getStringExtra("text"); 
        vTxt.setText("Name 1: "+eTxt.getText()+ "\n Name 2: "+text); 
       } 
      } 
     } 

Hoạt động 2

thêm đoạn mã sau để quay trở lại hoạt động một và vượt qua một số giá trị

  Intent intent=new Intent(Activity2.this, MainActivity.class); 

      Bundle extra=new Bundle(); 

      extra.putString("text", eTxt.getText().toString()); 
      intent.putExtras(extra); 
      setResult(RESULT_OK, intent); 
      finish(); 

Cuối cùng, bạn đã hoàn tất

Các vấn đề liên quan