Android 개발 Activity 와 Fragment 상세 설명

1.Activity 의 생명주기
1)여러 개의 Activity 가 Activity 스 택 을 구성 하고 현재 이 벤트 는 스 택 꼭대기 에 있 습 니 다.우 리 는 먼저 각종 Activity 기본 클래스 의 유형 도 를 살 펴 보 자.

Activity 클래스 가 정 의 된 후에 이 Activity 가 언제 예화 되 고 그 에 포 함 된 방법 이 언제 호출 되 는 지 는 개발 자가 결정 하 는 것 이 아니 라 모두 Android 시스템 에 의 해 결정 되 어야 합 니 다.
다음은 Activity 의 라 이 프 사이클 을 살 펴 보 겠 습 니 다.

2.Activity 의 용법
1)액 티 비 티 시작,종료

//          Activity   Intent
Intent intent = new Intent(MainActivity.this, TwoActivity.class);

//   Activity
startActivity(Intent intent);
startActivityForResult(Intent intent, int requestCode); // requestCode:   
//startActivityForResult           Activity,     onActivityResult         。

//   Activity
finish();
finishActivity(int requestCode);
// finishActivity     startActivityForResult     Activity。

2)다른 액 티 비 티 를 시작 하고 결 과 를 되 돌려 준다.
현재 Activity 재 작성 onActivityResult(int requestCode,int resultCode,Intent intent)
requestCode:요청 코드(이 방법 이 어떤 요청 결과 에서 촉발 되 었 는 지 알려 줍 니 다)
resultCode:Activity 가 되 돌려 주 는 결과 코드(되 돌아 오 는 데이터 가 어떤 새로운 Activity 에서 왔 는 지 알려 줍 니 다)
시 작 된 Activity 는 setResult()방법 으로 처리 결 과 를 설정 해 야 합 니 다.
실례:
현재 Activity 에 onActivity Result 방법 다시 쓰기

public class MainActivity extends Activity {
  Button bn;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //         
    ...
    //        
    bn.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this, TwoActivity.class);
        startActivityForResult(intent, 0); // 0    ,       
      }
    });
  }
  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    //        
    if (requestCode == 0 && resultCode == 0) {
      //   Intent  Extras  
      Bundle data = intent.getExtras();
      //   Bundle    
      String result = data.getString("test");
      Toast.makeText(getApplicationContext(), result, 0).show();
    }
  }
}
그리고 시 작 된 Two Activity 에서 setResult()방법 으로 처리 결 과 를 설정 합 니 다.

//      Activity   Activity   Intent
Intent intent = getIntent();
intent.putExtra("test", "test");
//    SelectActivity    ,          Activity
SelectCityActivity.this.setResult(0, intent);
//   TwoActivity
TwoActivity.this.finish();
3.Bundle 을 사용 하여 Activity 에서 데 이 터 를 교환 합 니 다.
Intent 는 추가 데 이 터 를 가지 고 다 니 는 여러 가지 방법 을 제공 합 니 다.다음 과 같 습 니 다.

intent.putExtras(Bundle data); //  Intent     
intent.putExtras(String name, Xxx value); //  Intent  key-value        
intent.getExtras(); //   Intent       
intent.getXxxExtras(String name); // Intent  key         
위의 방법 에서 Bundle 은 간단 한 데이터 패키지 입 니 다.Intent 는 주로 Bundle 대상 을 통 해 데 이 터 를 휴대 합 니 다.Bundle 은 여러 가지 방법 으로 데 이 터 를 액세스 합 니 다.

Bundle bundle = new Bundle(); //       Bundle  
bundle.putXxx(String key, Xxx data); //  Bundle     
bundle.putSerializable(String key, Serializable data); //  Bundle            (    java.io.Serializable  )
bundle.getXxx(String key); //  Bundle     
bundle.getSerializable(String key); //  Bundle            
4.Activity 의 네 가지 로 딩 모드
AndroidManifest.xml 에서 Activity 를 설정 할 때 android:launchMode 속성 을 지정 하여 Activity 의 로드 모드 를 설정 할 수 있 습 니 다.이 속성 은 4 개의 속성 값 을 지원 합 니 다.
표준:표준 모드;
singleTop:스 택 맨 위 예 모드;
singleTask:스 택 내 단일 예 모드(목표 Activity 가 이미 존재 하지만 스 택 꼭대기 에 있 지 않 으 면 시스템 은 이 Activity 위 에 있 는 모든 Activity 를 Task 스 택 에서 옮 겨 목표 Activity 를 스 택 꼭대기 로 옮 깁 니 다).
singleInstance:전역 단일 모드(Activity 를 새로 만 들 면 새 스 택 에 넣 습 니 다.한 스 택 에는 하나의 Activity 만 포함 되 어 있 습 니 다.대상 Activity 가 존재 하면 시스템 은 이 Activity 가 있 는 Task 를 프론트 데스크 톱 으로 옮 겨 표시 합 니 다).
5.Fragment 의 생명주기
Fragment 는 AndroiD 3.0 이 도입 한 새로운 API 로,Fragment 는 Activity 서브 모듈(Activity 세 션)을 대표 하 며,Fragment 는 Activity 에 삽입 해 사용 해 야 하 며,Fragment 의 수명 주 기 는 그 가 있 는 Activity 의 생명주기 에 의 해 제어 된다.
Fragment 는 getActivity()방법 으로 Activity 를 가 져 올 수 있 습 니 다.
Activity 는 Fragment Manager 의 findFragment ById()또는 findFragment ByTag()방법 으로 Fragment 를 가 져 올 수 있 습 니 다.
Activity 가 실행 되 는 과정 에서 Fragment Manager 의 add(),remove(),replace()방법 으로 Fragment 를 동적 으로 추가,삭제,교체 할 수 있 습 니 다.
1)우 리 는 먼저 각종 Fragment 기본 클래스 의 유형 도 를 살 펴 보 자.

2)프 래 그 먼 트 의 라 이 프 사이클 을 살 펴 보고 액 티 비 티 의 라 이 프 사이클 과 비교 해 보 자.


6.Fragment 의 용법
1)프 래 그 먼 트 만 들 기
Fragment 를 만 드 는 데 는 보통 다음 과 같은 세 가지 방법 이 필요 합 니 다.
onCreate()、onCreateView()、onPause()
Fragment 에 표 시 된 구성 요 소 를 제어 하기 위해 서 는 onCreateView()방법 을 다시 써 야 합 니 다.이 방법 으로 돌아 오 는 View 는 이 Fragment 에 표 시 된 View 구성 요소 로 사 용 됩 니 다.

//      ,      View   Fragment     
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  //   /res/layout/    fragment.xml    
  View view = inflater.inflate(R.layout.fragment, container, false);
  TextView name = (TextView)view.findViewById(R.id.name));
  ...
  return view;
}
2)Activity 에 Fragment 추가
Fragment 를 Activity 에 추가 하 는 방법 은 다음 과 같은 두 가지 가 있 습 니 다.
첫 번 째:레이아웃 파일 에요 소 를 사용 하여 Fragment,요 소 를 추가 하 는 android:name 속성 은 Fragment 의 실현 클래스 를 지정 합 니 다.
두 번 째:자바 코드 에 Fragment Transaction 대상 의 add()방법 으로 Fragment 를 추가 합 니 다.
Activity 의 getFragment Manager()방법 은 Fragment Manager,Fragment Manager 대상 의 beginTransaction()방법 으로 Fragment Transaction 대상 을 열 고 되 돌려 줍 니 다.
3)Activity 에서 Fragment 를 어떻게 동적 으로 추가,업데이트,삭제 합 니까?
먼저 MainActivity 레이아웃 파일 에 FrameLayout(id 를 fl 로 설정)을 추가 한 다음 두 개의 Fragment(MyFragment 와 Two Fragment)를 간단하게 만 듭 니 다.

public class MyFragment extends Fragment  { 
  @Override 
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_my, container, false); 
  } 
}
public class TwoFragment extends Fragment  { 
  @Override 
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_two, container, false); 
  } 
}
다음은 MainActivity 에서 Fragment 를 동적 으로 추가,업데이트,삭제 할 수 있 습 니 다.MainActivity 에서 호출 하 는 방법 은 다음 과 같 습 니 다.

//      Fragment
FragmentManager fm = getFragmentManager(); 
FragmentTransaction transaction = fm.beginTransaction(); 
myFragment = new MyFragment(); 
transaction.replace(R.id.fl, myFragment); 
transaction.commit();
어떤 단 추 를 누 르 면 Fragment 를 업데이트 합 니 다.이 단 추 를 누 르 면 이 벤트 는 다음 과 같 습 니 다.

@Override 
public void onClick(View v) { 
  FragmentManager fm = getFragmentManager(); 
  //   Fragment   
  FragmentTransaction transaction = fm.beginTransaction(); 
  twoFragment = new TwoFragment(); 
  //     Fragment     fl    
  transaction.replace(R.id.fl, twoFragment); 
  // transaction.addToBackStack(); //       back ,     BACK       Fragment     
  //      
  transaction.commit(); 
}

이상 은 안 드 로 이 드 활동 과 Fragment 에 대한 자 료 를 정리 하고 후속 적 으로 관련 자 료 를 계속 보충 하 는 것 입 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기