Android 개발 Activity 와 Fragment 상세 설명
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 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 에 대한 자 료 를 정리 하고 후속 적 으로 관련 자 료 를 계속 보충 하 는 것 입 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.