도래울

Activity 사이에 자료를 전달하는 예제 본문

개발/Android

Activity 사이에 자료를 전달하는 예제

도래울 2016. 2. 5. 11:27

2개의 Activity를 만들고, Activity 사이에 자료를 전달하는 것을 구현한다

 

View Design

 

Main에서 [수정] 버튼을 누르면 노란색으로 표시된 문자열이 Sub의 EditText에 나타나고, EditText의 내용을 수정한 후 [OK] 버튼을 누르면 입력한 내용이 Main의 노락색 텍스트에 반영되도록 한다. 2개의 View를 각각 디자인...

 

                        Main                                                             Sub

 

 

실행 결과 

 

 

-----------------  AndroidManifest.xml -------------------------

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.ComActivities"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainMenu"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".EditItem" />     // 추가
    </application>
</manifest>

 

--------------------  Main --------------------------

 

package com.ComActivities;

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

 

public class MainMenu extends Activity {
     TextView myText;
     final static int ACT_EDIT = 0;          // Intent 식별 코드
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        myText = (TextView) findViewById(R.id.TextView01);
        findViewById(R.id.btn_edit).setOnClickListener(MyListener);
        findViewById(R.id.btn_close).setOnClickListener(MyListener);
    }
    
    Button.OnClickListener MyListener = new Button.OnClickListener() {
          public void onClick(View v) {
               if (v.getId() == R.id.btn_close) {
                    finish();
                    return;
               } 

 

               Intent intent = new Intent(MainMenu.this, EditItem.class);          // Intent를 만든다
               intent.putExtra("Text_Main", myText.getText().toString());         // Text_Main이라는 태그를 붙여서 문자열을 넘긴다
               startActivityForResult(intent, ACT_EDIT);                                    // 결과를 기다리는 루틴에 식별 코드를 넘긴다
          }
    };
    
    protected void onActivityResult(int RequstCode, int resultCode, Intent data) {    // Intent의 결과를 처리하는 루틴
         switch (RequstCode) {
         case ACT_EDIT :                                                 
               if (resultCode == RESULT_OK)                                                     // 전달된 값이 있으면
                    myText.setText(data.getStringExtra("Text_Sub"));                    // Text_Sub 라는 태그를 달고온 문자열을 받는다
               break;
          }
     }
}

 

----------------------  Sub -----------------------

 

package com.ComActivities;

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

 

public class EditItem extends Activity {
     EditText myEdit;
     @Override
     public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.editview);
        
          myEdit = (EditText) findViewById(R.id.EditText01);
          Intent intent = getIntent();                                                   // Intent에서 전달받은 값을 가져온다
          myEdit.setText(intent.getStringExtra("Text_Main"));                // Text_Main 이라는 태그를 달고온 문자열을 가져온다
        
          findViewById(R.id.btn_OK).setOnClickListener(MyListener);
          findViewById(R.id.btn_Cancel).setOnClickListener(MyListener);
      }
    
      Button.OnClickListener MyListener = new Button.OnClickListener() {
          public void onClick(View v) {
             switch (v.getId()) {
             case R.id.btn_OK :
                  Intent intent = new Intent();
                  intent.putExtra("Text_Sub", myEdit.getText().toString());      // Text_Sub 라는 태그를 달아서 문자열을 전달한다
                  setResult(RESULT_OK, intent);
                  break;
             case R.id.btn_Cancel :
                  setResult(RESULT_CANCELED);
              }
              finish();
          } 
     };
}

Activity에 값을 넘겨줄  때에는 다음과 같은 메소드를 사용한다

 

    Intent.putExtra(String name, int value)                  name : 자료를 식별할 수 있는 임의의 문자열(Tag)

    Intent.putExtra(String name, String  value)            자료형에 따른 메소드가 Override 되어 있다

    Intent.putExtra(String name, boolen value)

                 .......................

 

    String      getStringExtra(String name)                         자료를 읽어들이는 메소드는 자료형에 따라 각각 다르다

    int           getIntExtra(String name, int defaultvalue)

    boolean   getBooleanExtra(String name, boolean defaultvalue)

                     ....................

 

값을 넘긴 후 리턴값을 받을 때에는 다음의 메소드를 사용한다

 

     startActivityForResult(Intent indent, int requstCode); 

 

Activity가 실제로 리턴값을 넘겨받는 것은 다음의 이벤트에서 처리된다

 

    protected void onActivityResult(int RequstCode, int resultCode, Intent data)

'개발 > Android' 카테고리의 다른 글

안드로이드 프로그램 샘플 모음  (0) 2016.02.05
Android RadioGroup 예제  (0) 2016.02.05
Android Emulator 단축키  (0) 2016.02.05
안드로이드 2.0 SDK + 이클립스 3.5 개발환경 설정 방법  (0) 2016.02.05
sqllite 정리  (0) 2016.02.05
Comments