먼저 두 폼간의 데이터를 주고 받는 코드는 다음과 같다.

public class ImageViewActivity extends Activity{
 TextView m_txt;
 final static int ACT_EDIT = 0; 
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  m_txt = (TextView)findViewById(R.id.m_txt);
  Button m_btn = (Button)findViewById(R.id.m_btn);
  m_btn.setOnClickListener(new Button.OnClickListener(){
   public void onClick(View v){
    Intent intent = new Intent(ImageViewActivity.this,subActivity.class);
    intent.putExtra("in_txt", m_txt.getText().toString());
    startActivityForResult(intent, ACT_EDIT);
   }
  });
 } 
 
 protected void onActivityResult(int requestcode, int resultcode, Intent data){
  switch(requestcode){
   case ACT_EDIT :
    if(resultcode == RESULT_OK){
     m_txt.setText(data.getStringExtra("out_txt"));
    }
    break;
  }
 }
}

public class subActivity extends Activity{
 EditText m_txt;
 public void onCreate(Bundle savedInstanceSatate){
  super.onCreate(savedInstanceSatate);
  setContentView(R.layout.subactivity);
  m_txt = (EditText)findViewById(R.id.s_txt);
  Intent intent = new Intent();
  m_txt.setText(intent.getStringExtra("in_txt"));
  Button s_btn_ok = (Button)findViewById(R.id.s_btn_ok);
  Button s_btn_cancel = (Button)findViewById(R.id.s_btn_cancel);
  s_btn_ok.setOnClickListener(lisentner);
  s_btn_cancel.setOnClickListener(lisentner);  
 }
 Button.OnClickListener lisentner = new View.OnClickListener() {
  Intent intent;
  @Override
  public void onClick(View v) {
   // TODO Auto-generated method stub
   switch(v.getId()){
   case R.id.s_btn_ok :
    intent = new Intent();
    intent.putExtra("out_txt", m_txt.getText().toString());
    setResult(RESULT_OK,intent);
    finish();
    break;
   case R.id.s_btn_cancel :
    setResult(RESULT_CANCELED);
    finish();
    break;
   }
  }
 };
}

이렇게 메인과 서브로 나뉜다. 당연히 매니페스트 파일에서 액티비티는 등록 해 줘야한다.

여기에서보면 putExtra 라는 것이 있다. 이는 액티비티로 서로 값을 전달하기 위해 쓰이며

int, String, Boolean 을 이용하여 보낼 수 있다. 첫번째 이름은 중복되지 않는 키 값이라 생각하면 된다.

이 값들을 확인 하려고 할 때는 getIntExtra, getStringExtra, getBooleanExtra를 이용하여 각기 타입에 맞는 값을 불러온다.

위에 함수 중 startActivityForResult(Intent, int) 형태가 보일 것이다.

이는 해당하는 액티비티를 호출하기 위해 어떤 액티비티의 리턴인지 구분 하기 위해 이용된다.

동시에 onActivityResult(int, int, Intent) 메서드가 보일 것이다. 이는 호출된 액티비티가 종료 되면서 실행 되는 부분으로 액티비티에서 전달하는 값을 표현하고자 한다면 이 메서드 내에서 처리 하면 된다.

마지막으로 setResult 함수를 살펴보면 성공시에는 intent 내용을 전달하지만 그렇지 않을 경우는 처리 하지 않는 것으로 정의 했다. 여기서 intent라고 표현된 내용은 리턴 값 내용이다.

액티비티는 화면 하나라고 생각하면 된다. 하지만 실제 보이는건 뷰이며 액티비티는 뷰 또는 뷰 그룹을 가져와야 보이는 것이다. 또한 액티비티끼리는 중첩되지가 않는다.

다음은 버튼을 이용한 액티비티의 화면 전환 예제이다.

먼저 xml을 이용하여 서로 다른 화면을 구성해 둔다.

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.app.Activity;
import android.content.Intent;

public class ImageViewActivity extends Activity{ 
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Button m_btn = (Button)findViewById(R.id.m_btn);
  m_btn.setOnClickListener(new Button.OnClickListener(){
   public void onClick(View v){
    Intent intent = new Intent(ImageViewActivity.this,subActivity.class);
    startActivity(intent);
   }
  });
 } 
}

위 코드를 보면 버튼을 이용하여 다른 화면을 나타나게 한다. 그리고 위에 인텐트라는 것이 보일 것인데 이는 액티비티간의 전
환 즉, 호출하여 화면을 바꿔 줄 수가 있다.

인텐트 액션 내용을 보면 다음과 같다.

 액션 대상  설명 
ACTION_CALL ACTIVITY 통화 시작
ACTION_EDIT ACTIVITY  테이터 표시 및 편짐
ACTION_MAIN ACTIVITY 메인 액티비티 호출
ACTION_VIEW ACTIVITY  화면 보이기
ACTION_DIAL ACTIVITY 전화 걸기
ACTION_BATTERY_LOW BR  배터리 부족
ACTION_HEADSET_PLUS BR 헤드셋 접속 구분
ACTION_SCREEN_ON BR  화면 열림
ACTION_TIMEZONE_CHANGED BR 타임 존 변경
 
다음은 서브 액티비티 코드이다. 동일한 내용 인 듯 하지만 finish() 라는 함수를 이용하여 화면의 종료를 나타내며 메인 액티비티로 돌아가게 한다.

public class subActivity extends Activity{
 public void onCreate(Bundle savedInstanceSatate){
  super.onCreate(savedInstanceSatate);
  setContentView(R.layout.subactivity);
  Button s_btn = (Button)findViewById(R.id.s_btn);
  s_btn.setOnClickListener(new Button.OnClickListener(){
   public void onClick(View v){
    finish();
   }
  });
 }
}

여기까지 하고 난 다음 또 매니페스트 파일에 내용을 추가 해 줘야 한다.  열어보면 하나의 액티비티만 정의 되어 있을 것이다.

서브 액티비티를 등록 해 줘야 한다는 점을 명심 해야한다.