안드로이드 조각을 수명 주기
오늘 우리는 우리 것에 대해 배우 안드로이드 조각을 수명 주기고 구현하는 하나의 활동 등으로 구성된 두 개의 조각에 안드로이드 프로그램입니다.
Android Fragment
Fragment
Android 의 클래스는 동적 사용자 인터페이스를 구축하는 데 사용됩니다. 조각은 활동 내에서 사용해야합니다. 조각의 가장 큰 장점은 여러 화면 크기에 대한 UI 를 만드는 작업을 단순화한다는 것입니다. 활동에는 임의의 수의 조각이 포함될 수 있습니다.
안드로이드 조각은 그 자체로 대부분의 다른 UI 구성 요소 인 뷰의 하위 클래스가 아닙니다. 대신,조각은 그 안에 전망을 가지고 있습니다. 결국 조각이 사는 활동 내부에 표시되는 것은이 뷰입니다.
기 때문에 안드로이드 조각되지 않은 보기에 추가하는 활동은 다소 다른 추가하는 것보다 보기(예:스트링). 조각은 활동 내부의 뷰 그룹에 추가됩니다. 이 뷰 그룹 안에 프래그먼트의 뷰가 표시됩니다.
다이어그램을 묘사하면 어떻게 되는 조각에 추가되는 활동이다.
첫 번째 활동에 대한 참조를 가져옵니다. 그런 다음 프래그먼트의 뷰가 내부에서 렌더링 될 뷰 그룹에 대한 참조를 가져옵니다. 그런 다음 활동이 조각을 추가합니다. 그런 다음 프래그먼트는 해당 뷰를 만들고 액티비티로 반환합니다. 그런 다음 뷰가 뷰 그룹 부모에 삽입되고 조각이 살아 있습니다.
조각 수명주기
Android 조각 수명주기는 아래 이미지에 나와 있습니다.
아래는 fragment lifecycle 의 방법입니다.
-
onAttach()
:이 메서드는 onCreate()이전에도 먼저 호출되어 조각이 활동에 첨부되었음을 알립니다. 당신은 당신의 조각을 호스팅 할 활동을 전달 -
onCreateView()
: 시스템은 프래그먼트가 처음으로 UI 를 그릴 때가되면이 콜백을 호출합니다. 조각에 대한 UI 를 그리려면 조각의 레이아웃의 루트 인이 메서드에서 뷰 구성 요소를 반환해야합니다. 조각이 UI -
onViewCreated()
를 제공하지 않으면 null 을 반환 할 수 있습니다.Oncreateview()후에 호출됩니다. 이것은 경우에 특히 유용 상속 onCreateView()구현이지만 우리를 구성할 필요가 결과 전망과 같 ListFragment 때 어댑터 설정 -
onActivityCreated()
:이것은 oncreate()및 onCreateView()후에 호출되어 활동의 onCreate()가 완료되었음을 나타냅니다. 무언가가있는 경우에는 필요한 것을 초기화에서는 조각에 따라 달라집 활동의 onCreate()을 완료된 작업 그 onActivityCreated()를 사용할 수 있는 초기화 작업 -
onStart()
:의 종료()메소드가 호출 한 후 조각의 표시 가져옵 -
onPause()
: 시스템 호출 이 방법으로는 첫 번째 표시 사용자가 떠나 조각입니다. 이것은 일반적으로 어디를 투입해야 하는 모든 변경 사항을 저장해야만을 넘어는 현재 사용자 세션 -
onStop()
:파편이 될 것이 중지를 호출하여 onStop() -
onDestroyView()
:이라고 전 onDestroy(). 이것은 UI 를 설정 한 onCreateView()에 대한 대응입니다. UI 에 특정한 것을 정리하는 데 필요한 것이 있으면 해당 논리를 onDestroyView() -
onDestroy()
: ondestroy()는 프래그먼트의 상태를 최종 정리하기 위해 호출되었지만 Android 플랫폼에 의해 호출되는 것을 보장하지는 않습니다. -
onDetach()
:그것은이라고 후 onDestroy(),을 알리는 조각되었습에서 분리됩 활동을 호스팅
안드로이드 조각 클래스가
파편에 추가되었는 안드로이드 API 에서 벌집(API11).
-
android.app.Fragment
:모든 조각 정의에 대한 기본 클래스 -
android.app.FragmentManager
: 클래스와 상호 작용하기 위한 조각을 내는 활동을 -
android.app.FragmentTransaction
:클래스 수행을 위해 원자 설정한 조각의 운영
때 사용하는 패키지의 호환성 라이브러리 구글에 의해 제공되는 다음과 같은 클래스를 사용해 구현됩니다.
-
android.support.v4.app.FragmentActivity
: 에 대한 기본 클래스는 모든 활동을 사용하여 호환성 기반 조각(및 로더)기능 android.support.v4.app.Fragment
android.support.v4.app.FragmentManager
android.support.v4.app.FragmentTransaction
안드로이드 조각 onCreateView()
여기에 샘플을 사용하여 조각 onCreateView()구현을 위한
public class SampleFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup parentViewGroup, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_sample, parentViewGroup, false); return rootView; }}
onCreateView()
방법을 가져옵 LayoutInflater,a 뷰 그룹과는 번들로 매개 변수입니다.
LayoutInflater
는 레이아웃 XML 파일을 기반으로 뷰 인스턴스를 만들 수있는 구성 요소입니다. 보시다시피,이 예제는 실제로layout.inflate()
를 호출하여 수행합니다.
inflate()
방법은 세 가지 매개변수의 id 레이아웃 XML 파일(내부 R. 레이아웃),부모 뷰 그룹으로는 조각 보기를 삽입할 수 있고,세 번째 부울이 말하는 여부에 조각 보기로 팽창된 레이아웃에서는 XML 파일 삽입되어야 하는 부모 뷰 그룹. 이 경우에 우리는 거짓 패스 보기 때문에 첨부됩니다 부모 뷰 그룹,다른 곳에서의 일부에 의해 안드로이드 코드에있는 전화. 전달하는 경우 false 를 마지막으로 매개 변수를 부풀(),부모 뷰 그룹은 아직도 레이아웃에 사용되는 계산의 팽창된 보고,그래서 당신은 통과할 수 없습니다 null 으로 부모 뷰 그룹.
ViewGroup
매개 변수의 onCreateView()부모 뷰 그룹으로의 조각가를 삽입 할 수 있습니다. 이것은 조각을”호스트”할 활동 내부의 뷰 그룹입니다.
Bundle
매개 변수의 onCreateView()은 번들에서는 조각 데이터를 저장할 수 있습니다,그냥 좋아하는 활동입니다.
Android Fragment Example
Android fragments example project comprises of a single activity holding two fragments: TextFragment and MenuFragment respectively.
Android Fragment Example Code
The MainActivity
holds the two fragments TextFragment
and MenuFragment
. 그래서 수 있습을 시작으로 정의하는 조각에서는 xml 레이아웃
activity_main.xml
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:weightSum="1.0"> <fragment android:layout_height="match_parent" android:layout_width="match_parent" class="journaldev.com.fragments.fragments.MenuFragment" android:id="@+id/fragment" android:layout_weight="0.5"/> <fragment android:layout_width="match_parent" android:layout_height="match_parent" class="journaldev.com.fragments.fragments.TextFragment" android:id="@+id/fragment2" android:layout_weight="0.5"/></LinearLayout>
으로 우리는 볼 수 있습니다 클래스 파일을 조각의 일부 이 활동으로 정의된 class=”journaldev.com.조각되어 있습니다.조각되어 있습니다.TextFragment”
조각 클래스고 그들의 레이아웃은에서와 같이 정의 조각이다.
package journaldev.com.fragments.fragments;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import journaldev.com.fragments.R;public class TextFragment extends Fragment { TextView text,vers; @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.text_fragment, container, false); text= (TextView) view.findViewById(R.id.AndroidOs); vers= (TextView)view.findViewById(R.id.Version); return view; } public void change(String txt, String txt1){ text.setText(txt); vers.setText(txt1); }}
text_fragment.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:gravity="center" android:background="#5ba4e5" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="40px" android:textColor="#ffffff" android:layout_gravity="center" android:id="@+id/AndroidOs"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textColor="#ffffff" android:textSize="30px" android:id="@+id/Version"/></LinearLayout>
TextFragment 로 구성되어 textviews 들고 안드로이드 이름과 버전 번호입니다.
package journaldev.com.fragments.fragments;import android.app.ListFragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ListView;import journaldev.com.fragments.R;public class MenuFragment extends ListFragment { String AndroidOS = new String { "Cupcake","Donut","Eclair","Froyo","Gingerbread","Honeycomb","Ice Cream SandWich","Jelly Bean","KitKat" }; String Version = new String{"1.5","1.6","2.0-2.1","2.2","2.3","3.0-3.2","4.0","4.1-4.3","4.4"}; @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view =inflater.inflate(R.layout.list_fragment, container, false); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, AndroidOS); setListAdapter(adapter); return view; } @Override public void onListItemClick(ListView l, View v, int position, long id) { TextFragment txt = (TextFragment)getFragmentManager().findFragmentById(R.id.fragment2); txt.change(AndroidOS,"Version : "+Version); getListView().setSelector(android.R.color.holo_blue_dark); }}
list_fragment.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@android:id/list" /></LinearLayout>
MenuFragment 표시 ListView. 우리가 볼 수 있듯이 여기서,레이아웃의 ListView 은 기본 simple_list_item_1 에 반대하는 사용자 정의 레이아웃을 위해 우리가 만든 목록보기 이전에 문서입니다.
MainActivity 는 onCreate 메서드에서 setContentView 를 호출합니다. 조각은 xml 파일에서 호출됩니다.
또는 아래 스 니펫과 같이FragmentManager
를 사용하여 활동 클래스의 조각을 추가 할 수 있습니다:
getFragmentManager() .beginTransaction() .add(R.id.fragmentParentViewGroup, new MyFragment()) .commit();
여기에는 id fragmentParentViewGroup 속을 포함하는 아래와 같다.
<FrameLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools" android:id="@+id/fragmentParentViewGroup" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MyActivity" tools:ignore="MergeRootFrame" />
안드로이드 조각 예 응용 프로그램
아래와 같은 출력을 생산하여 우리의 프로젝트를 당신이 볼 수있는 두 개의 조각이 여기에 존재하고 선택할 경우 그들 중 하나에서 왼쪽 측면 조각, 데이터 채워지는 오른쪽에 있는 조각입니다.
아래 링크에서 최종 android fragment project 를 다운로드 할 수 있습니다.나는 이것을 할 수 없다.