Android 학습 노트16_여러 개의 Activity,파라미터 전달,요청 코드 와 결과 코드 를 추가 하여 사용 합 니 다.
19887 단어 안 드 로 이 드 학습
첫 번 째 단계:새 계승 Activity 클래스,예 를 들 어 NewActivity
public class NewActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.xxx) ....
}
...
}
두 번 째 단계:기능 목록 AndroidManifest.xml 파일 에 Activity 설정 코드 를 추가 해 야 합 니 다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.action"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
.....
<activity android:name=".NewActivity" android:label=" activity "/>
</application>
...
</manifest>
안 드 로 이 드:name 속성 값 앞 에 점 을 추가 하면 NewActivity 는 현재 가방 com.example.action 의 클래스 입 니 다.만약 에 클래스 가 응용 되 는 현재 가방 에 있 으 면 기 호 를 생략 할 수 있 습 니 다.만약 에 클래스 가 응용 되 는 하위 가방 에 점 을 추가 해 야 합 니 다.예 를 들 어 NewActivity 류 는 com.example.action.user 가방 에 이렇게 쓸 수 있 습 니 다.
2.새로운 Activity 열기:
Activity 를 열 면 Intent 를 통 해 명시 적 의도 와 암시 적 의도 로 나 눌 수 있 습 니 다.다음은 명시 적 의 도 를 통 해 Activity 를 열 수 있 습 니 다.그 중에서 매개 변 수 는 주로 Bundle 류 를 통 해 전달 된다.
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
.......
button.setOnClickListener(new View.OnClickListener(){// Activity
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, NewActivity.class)
Bundle bundle = new Bundle();//
bundle.putString("name", "kiki");
bundle.putInt("age", 25);
intent.putExtras(bundle);//
startActivity(intent);
}}); }
}
// Activity Activity :
public class NewActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
//........
Bundle bundle = this.getIntent().getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
}
}
3.Bundle 류 소개:
Bundle 류 는 데 이 터 를 휴대 하 는 데 사 용 됩 니 다.Map 과 유사 하여 key-value 이름 값 의 형식 값 을 저장 하 는 데 사 용 됩 니 다.Map 에 비해 putXxx()/getXxx()방법 을 제공 합 니 다.예 를 들 어 putString()/getString()과 putInt()/getInt(),putXxx()는 Bundle 대상 에 데 이 터 를 넣 고 getXxx()방법 은 Bundle 대상 에서 데 이 터 를 얻 는 데 사 용 됩 니 다.Bundle 의 내 부 는 실제로 HashMap
public final class Bundle implements Parcelable, Cloneable {
Map<String, Object> mMap;
public Bundle() {
mMap = new HashMap<String, Object>();
}
public void putString(String key, String value) {
mMap.put(key, value);
}
public String getString(String key) {
Object o = mMap.get(key);
return (String) o;
........// null,
}}
Bundle 대상 의 getXxx()방법 을 호출 할 때 방법 내 부 는 이 변수 에서 데 이 터 를 가 져 온 다음 에 데 이 터 를 유형 변환 합 니 다.어떤 유형 으로 변환 할 지 는 방법의 Xxx 에 의 해 결정 되 고 getXxx()방법 은 변 환 된 값 을 되 돌려 줍 니 다.4.Intent 에 데 이 터 를 추가 하 는 두 가지 방법:
, Intent:
Intent intent = new Intent();
Bundle bundle = new Bundle();//
bundle.putString("name", "kiki");
intent.putExtras(bundle);// , , key
: , Intent, , 。
Intent intent = new Intent();
intent.putExtra("name", "kiki");
Intent putExtra() , : putExtra(String name, String value)、 putExtra(String name, long value),
putExtra() Intent Bundle , Bundle , putExtra() Bundle ,
Intent putExtra(String name, String value) :
public class Intent implements Parcelable {
private Bundle mExtras;
public Intent putExtra(String name, String value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
}
5.Activity 를 새로 열 고 닫 은 후 되 돌아 오 는 데 이 터 를 얻 습 니 다.
Activity 에서 Activity 를 새로 열 고 닫 은 후 되 돌아 오 는 데 이 터 를 얻 으 려 면 시스템 에서 제공 하 는 startActivity ForResult(Intent intent,int requestCode)방법 으로 새로운 Activity 를 열 어야 합 니 다.새로운 Activity 가 닫 힌 후 앞의 Activity 에 데 이 터 를 전송 합 니 다.전 송 된 데 이 터 를 얻 기 위해 서 는앞의 Activity 에 onActivity Result(int requestCode,int resultCode,Intent data)방법 을 다시 써 야 합 니 다.새 Activity 가 닫 히 면 새 Activity 가 되 돌아 오 는 데 이 터 는 Intent 를 통 해 전 달 됩 니 다.안 드 로 이 드 플랫폼 은 앞의 Activity 의 onActivity Result()방법 을 호출 하여 데 이 터 를 되 돌려 주 는 Intent 를 세 번 째 입력 매개 변수 로 전송 합 니 다.onActivity Result()방법 에서 세 번 째 입력 매개 변수 로 새 Activity 가 되 돌아 오 는 데 이 터 를 꺼 낼 수 있 습 니 다.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
.......
Button button =(Button) this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){// Activity
public void onClick(View v) {
// ,
startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);
}});
}
// , startActivityForResult()
// , Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getExtras().getString(“result”));// Activity
}
}
뉴 액 티 비 티 클래스 에서 MainActivity 가 보 낸 인 자 를 받 고 해당 정 보 를 되 돌려 줍 니 다.
public class NewActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
......
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent();// Intent
intent.putExtra("result", "return code");// Intent
NewActivity.this.setResult(RESULT_OK, intent);//
NewActivity.this.finish();// Activity
}});
}
}
setResult() , RESULT_OK Activity , -1, :
public class android.app.Activity extends ......{
public static final int RESULT_CANCELED = 0;
public static final int RESULT_OK = -1;
public static final int RESULT_FIRST_USER = 1;
}
6.요청 코드 의 역할:startActivity ForResult(Intent intent,int requestCode)방법 으로 새로운 Activity 를 엽 니 다.startActivity ForResult()방법 에 요청 코드(두 번 째 매개 변수)를 입력 해 야 합 니 다.요청 코드 의 값 은 업무 수요 에 따라 자신 이 설정 하여 표지 요청 소스 에 사용 합 니 다.예 를 들 어 하나의 Activity 는 두 개의 버튼 이 있 습 니 다.이 두 단 추 를 누 르 면 같은 Activity 를 엽 니 다.그 버튼 이 든 새로운 Activity 를 엽 니 다.이 새로운 Activity 가 닫 히 면 시스템 은 앞의 Activity Result(int requestCode,int resultCode,Intent data)방법 을 호출 합 니 다.onActivity Result()방법 에서 새 Activity 가 그 버튼 으로 열 렸 다 는 것 을 알 고 해당 하 는 업무 처 리 를 해 야 합 니 다.
@Override
public void onCreate(Bundle savedInstanceState) {
....
button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);
}});
button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2);
}});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case 1:
// 1 ,
case 2:
// 2 ,
}
}
}
7.결과 코드 의 역할:
하나의 Activity 에 서 는 startActivity ForResult()방법 으로 여러 개의 서로 다른 Activity 를 열 어 서로 다른 업 무 를 처리 할 수 있 습 니 다.이 새로운 Activity 가 닫 히 면 시스템 은 앞의 Activity Result(int requestCode,int resultCode,Intent data)방법 을 호출 합 니 다.되 돌아 오 는 데이터 가 어떤 새로운 Activity 에서 왔 는 지 알 기 위해 서 는 onActivity Result()방법 에서 이렇게 할 수 있 습 니 다(ResultActivity 와 NewActivity 가 열 려 는 새로운 Activity).
public class ResultActivity extends Activity {
.....
ResultActivity.this.setResult(1, intent);
ResultActivity.this.finish();
}
public class NewActivity extends Activity {
......
NewActivity.this.setResult(2, intent);
NewActivity.this.finish();
}
public class MainActivity extends Activity { // Activity ResultActivity NewActivity
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode){
case 1:
// ResultActivity
case 2:
// NewActivity
}
}
}