Android 학습 노트16_여러 개의 Activity,파라미터 전달,요청 코드 와 결과 코드 를 추가 하여 사용 합 니 다.

1.새로운 Activity 단계 추가:
첫 번 째 단계:새 계승 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형식의 변 수 를 사용 하여 putXxx()방법 으로 넣 은 값 을 저장 합 니 다.
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     

                }

          }

}

좋은 웹페이지 즐겨찾기