2012-02-05 4 views
5

두 개의 활동 (activity1 및 activiy2)이 있으며 각 활동에는 각각 하나의 단추가 있습니다. 활동 1에서는 몇 가지 옵션이있는 회 전자가 있습니다. 이 회 전자에서 옵션 2를 선택한다고 가정하고 activity1의 단추를 클릭하면 activity2가 시작됩니다. 뒤로 버튼을 클릭하면 activity1이 다시 시작되고 동일한 옵션 2가 표시됩니다 (필요한 경우). 이제 문제는 내 activity2가 시작되고 그 내에서 버튼을 클릭하면 activity1이 시작된다는 것입니다. 그러나 활동 1의 이전 상태를 다시 시작하는 대신 방금 생성 한 방식으로 시작하고 이전 선택이 변경됩니다. 뒤로 버튼과 같은 기능을 어떻게 사용할 수 있습니까? (이전 활동으로 되돌아가는 기능이 아닙니다. 다시 활동을 시작하면 자동으로 이전 활동 상태로 다시 돌아갑니다. 단순히 다시 방문하면 활동의 이전 상태를 유지하는 방법을 알아야합니다.활동의 이전 상태를 유지하는 방법

이 버튼을 클릭 할 때 나는 하나의 액티비티에서 다른 액티비티로 이동이 코드입니다 :

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

startActivity(intent); 

이 좋은 말 중 하나가 답을주는 경우를 설명하십시오, 그래서 줘요, 안드로이드에 초보자입니다 도움 약간. 감사합니다.

+0

여기에 대한 설명서는 http://developer.android.com/reference/android/app/Activity.html –

답변

9

대답을 찾았습니다.

내가 activity1과 activity2의 두 가지 활동을하고 있고 activity1에서 activity2로 이동한다고 가정하고 (활동 2에서 일부 작업을 완료했습니다) 다시 클릭하여 활동 1로 돌아갑니다. activity1의 버튼. 이제이 단계에서 나는 activity2로 돌아가고 싶었고, 나는 마지막으로 activity2를 떠날 때 같은 상태에서 나의 activity2를보고 싶다.

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

그리고 버튼 클릭 이벤트에 activity1에의

내가이 같은 짓을 :

Intent intent=new Intent(); 
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
intent.setClassName(this,"com.mainscreen.activity2"); 
startActivity(intent); 
내가 무슨 짓을 위의 시나리오에 대한

는 매니페스트에 나는이 같은 일부 변경 한 것입니다

그리고는 버튼 클릭 이벤트에 activity2에에이 같은 짓을 : 이제

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

무엇을 줘야 우리가 활동 2에서했던 변화가 사라지지 않을지라도 이전에 떠났던 것과 같은 상태에서 활동 2를 볼 수 있습니다.

저는 이것이 답이라고 생각하며 이것은 저에게 잘 맞습니다.

+0

이 답변을 계속 게시하는 것을 반복하십시오. 중복 질문을 발견하면 해당 질문에 플래그를 지정하십시오. – Mat

3

Activity의 onSaveInstanceState 이벤트 처리기를 재정 의하여 Bundle 매개 변수를 사용하여 인스턴스 값을 저장할 수 있습니다. 응용 프로그램이 세션 중에 다시 시작하도록 강요하는 경우 저장된 번들은 onRestoreInstanceStateonCreate 방법에 전달

@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); 
} 

예를 들면 다음과 같습니다. 그런 다음 Bundle에서 값을 추출하고이를 사용하여 Activity 인스턴스 상태를 업데이트 할 수 있습니다. 다음은 예입니다

@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); 
} 

그것은 활동이 비활성화 된 경우에만 onSaveInstanceState를 호출하지만이 finish 또는 뒤로 버튼을 눌러 사용자의 호출에 의해 폐쇄 때가 아니라 기억하는 것이 중요합니다.

+0

비트 설명은 –

+0

으로 업데이트 된 답변을 참조하십시오. –

+0

이전 활동의 전체 상태는 어떨까요? 나는 그 활동이 뒷 배경에 있다는 것을 의미합니다. 단순히 그것을 다시 앞으로 가져올 수있는 방법이 있습니까? 많은 스레드가 해당 액티비티에서 실행되고 있다면, 최선의 선택은 그것을 앞당기는 것입니다. –

0

다운로드 source code이나 활동 하나를 들어 the entire post

참조, 당신은 활동 하나 인 부모 활동에 값을 반환에 startActivityForResult() 함수를 사용해야합니다.

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

그리고

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); 
       } 
      } 
     } 

활동 2

활동 한 돌아가려면 다음 코드를 추가하고 일부를 통과 추가, 활동 하나의 변경없이 다음 코드를 활동 두 가지의 값을받을 수 값

  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(); 

마지막으로 완료되었습니다

관련 문제