* 현재 액티비티(DtatTransforActivity의 TextView의 내용을 datatransfor에 전달해 봅니다.
* 그리고 datatransfor 엑티비티의 EditText에 입력한 내용을 되돌려줍시다.


1. xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Sample"
/>
<Button
android:id="@+id/btnedit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="mOnClick"
android:text="Edit"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<EditText
android:id="@+id/stredit"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btnok"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="mOnClick"
android:text="OK"/>
<Button
android:id="@+id/btncancel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="mOnClick"
android:text="Cancel" />
</LinearLayout>
2. java code
* 중요 메소드
1. startActivityForResult : 이전 포스팅에서는 화면만 이동하는 Activity클래스의 메서드인 startActivity()를 사용했다면 해당 메소드는 ForResult 즉 액티비티이동 후 다시 되돌아올 때 결과를 가지고 올수 있는 메서드입니다.
2. Intent.putExtra("키","데이터") : 액티비티를 이동할 때 전달하고자 하는 데이터를 해당 메소드를 통해 Intent에 담아갑니다.
4. Activity.getIntent : 새로 이동한 액티비티에서는 getIntent()를 통해 전달 받은 Intent객체의 정보를 가져올 수 있습니다.
5. onActivityResult() : startAcitivityForResult()를 이용하여 액티비티를 이동할 경우 새로 호출한 액티비티가 종료될 때
콜백메서드로 onActivityResult()를 호출하게 되는데 해당 메서드의 매개변수에는 사라진 액티비티의 Intent 정보가 넘어옵니다.
package com.example.datatransforactivity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceManager.OnActivityResultListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void mOnClick(View v){
Intent intent = new Intent(this,TransferActivity.class);
TextView txt = (TextView)findViewById(R.id.text);
//intent에 data라는 키로 데이털르 저장해서 다음 Activity로 이동
intent.putExtra("data",txt.getText().toString());
//ShareData.getInstance().name = txt.getText().toString();
// 인텐트를 화면에 출력하고 인텐트가 화면에서 제거될때 콜백메소드를 호출하도록 설정
startActivityForResult(intent,1);
}
//콜백메서드 정의
//현재화면위에 출력된 액티비티가 화면에서 제거될때 호출되는 메소드
@Override
protected void onActivityResult(int requestCode,int reusltCode, Intent data){
String msg = data.getStringExtra("data");
TextView txt = (TextView)findViewById(R.id.text);
txt.setText(msg);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
package com.example.datatransforactivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class TransferActivity extends Activity {
@Override
public void onCreate(Bundle bundle){
super.onCreate(bundle);
setContentView(R.layout.actedit);
EditText edit = (EditText)findViewById(R.id.stredit);
//자기 인텐트를 부릅니다
Intent intent = getIntent();
//data라는 키로 저장된 데이터를 문자열로 받아서 저장
String data = intent.getStringExtra("data");
edit.setText(data);
}
public void mOnClick(View v){
//호출한 엑티비티에게 데이터를 전달하기 위해서 intent를 생성
Intent intent = new Intent();
EditText edit = (EditText)findViewById(R.id.stredit);
intent.putExtra("data", edit.getText().toString());
setResult(1,intent);//정수는 아무거나 주시면됩니다
finish();
}
}