>  기사  >  Java  >  Android 기본 사항: Fragment를 사용하여 여러 페이지 간 전환 제어

Android 기본 사항: Fragment를 사용하여 여러 페이지 간 전환 제어

高洛峰
高洛峰원래의
2017-02-07 16:10:371236검색

오늘은 Fragment의 제어, View 전환, 페이지 교체 등의 작업을 중심으로 설명하겠습니다. Fragment의 관리 객체를 얻는 방법과 Activity와 통신하는 방법도 있습니다.

1. 프래그먼트 관리
액티비티에서 프래그먼트를 관리하려면 FragmentManager를 사용해야 합니다. 액티비티의 getFragmentManager()를 호출하여 인스턴스를 가져옵니다.

• 몇 가지 작업을 수행할 수 있습니다. FragmentManager를 통해 다음을 포함합니다. findFragmentById()(활동 레이아웃에서 UI 조각을 제공하는 데 사용됨) 또는 findFragmentByTag()(UI가 있거나 없는 조각에 적용 가능)를 사용하여 활동에 존재하는 조각을 가져옵니다.
•popBackStack()을 사용하여 백 스택에서 조각을 팝합니다(사용자가 BACK 명령을 누르는 시뮬레이션).
•addOnBackStackChangeListener()를 사용하여 백 스택의 변경 사항에 대한 리스너를 등록합니다.

2. 프래그먼트 트랜잭션 처리
액티비티에서 프래그먼트를 사용하는 매우 강력한 기능은 사용자 상호 작용을 기반으로 프래그먼트에 대한 추가, 제거, 교체 및 기타 작업을 수행하는 것입니다. 활동에 제출된 각 변경 사항 집합을 트랜잭션이라고 하며 FragmentTransaction의 API를 사용하여 처리할 수 있습니다. 또한 각 트랜잭션을 활동 관리 백스택에 저장하여 사용자가 프래그먼트의 변경 사항을 다시 탐색할 수 있도록 할 수 있습니다(활동을 다시 탐색하는 것과 유사).

FragmentManager에서 FragmentTransaction 인스턴스 가져오기:

FragmentManager fragmentManager =getFragmentManager();
FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction();

각 트랜잭션은 동시에 실행될 변경 사항 집합입니다. add(), 제거() 및 교체()와 같은 메소드를 사용하여 특정 트랜잭션 내에서 수행하려는 모든 변경 사항을 설정할 수 있습니다. 그런 다음 트랜잭션을 활동에 적용하려면 commit()을 호출해야 합니다.

commit()을 호출하기 전에 addToBackStack()을 호출하여 프래그먼트 트랜잭션의 백스택에 트랜잭션을 추가할 수 있습니다. 이 백 스택은 액티비티에 의해 관리되며 사용자가 BACK 버튼을 눌러 이전 프래그먼트 상태로 돌아갈 수 있도록 합니다.

//创建修改实例
Fragment newFragment = newExampleFragment();
FragmentTransaction transaction =getFragmentManager().beginTransaction();
// Replace whatever is in thefragment_container view with this fragment,
// and add the transaction to the backstack
transaction.replace(R.id.fragment_container,newFragment);
transaction.addToBackStack(null);
//提交修改
transaction.commit();

위는 하나의 프래그먼트를 다른 프래그먼트로 교체하고 이전 상태를 백 스택에 유지하는 방법입니다. 이 예에서 newFragment는 현재 레이아웃 컨테이너에서 R.id.fragment_container로 식별된 조각을 대체합니다. addToBackStack()을 호출하면 교체 트랜잭션이 백 스택에 저장되므로 사용자는 BACK 버튼을 눌러 트랜잭션을 롤백하고 이전 조각을 다시 가져올 수 있습니다.


트랜잭션에 여러 변경 사항을 추가하고(예: add() 또는 제거()) addToBackStack()을 호출하면 모든 변경 사항은 commit()을 호출하기 전에 적용됩니다. 변경 사항은 단일 트랜잭션으로 백 스택에 추가되며 BACK 버튼을 누르면 함께 ​​롤백됩니다. FragmentTransaction에 변경 사항이 추가되는 순서는 중요하지 않습니다. 단, 다음 예외는 있습니다.

• Commit()은 마지막으로 호출해야 합니다.
• 여러 조각이 동일한 컨테이너에 추가되는 경우 추가된 항목에 따라 뷰 계층 구조에서의 위치가 결정됩니다.

에 표시된 순서는 조각을 제거하는 트랜잭션을 실행할 때 addToBackStack()이 호출되지 않으면 트랜잭션이 커밋될 때 해당 조각이 삭제됩니다. 사용자는 다시 탐색할 수 없습니다. 이러한 이유로 프래그먼트를 제거할 때 addToBackStack()이 호출되면 프래그먼트가 중지되고 사용자가 뒤로 이동하면 다시 시작됩니다. 또한 각 조각 트랜잭션에 대해 트랜잭션을 커밋하기 전에 setTransition()을 호출하여 트랜잭션 애니메이션을 적용할 수 있습니다.

commit()을 호출해도 트랜잭션이 즉시 실행되지는 않습니다. 반대로 트랜잭션을 예약하고 준비되면 활동의 UI 스레드(메인 스레드)에서 실행합니다. 그러나 필요한 경우 UI 스레드에서 ExecutePendingTransactions()를 호출하여 commit()에 의해 제출된 트랜잭션을 즉시 실행할 수 있습니다. 그러나 트랜잭션이 다른 스레드에 있는 작업의 슬레이브가 아닌 한 이는 일반적으로 필요하지 않습니다.
경고: 액티비티가 상태를 저장하기 전(사용자가 액티비티를 떠날 때)에만 commit()을 사용하여 트랜잭션을 커밋할 수 있습니다.

3. 프래그먼트가 구현되어 있지만 독립적인 Activity 개체로 여러 활동에서 사용할 수 있지만 지정된 프래그먼트 인스턴스는 이를 포함하는 활동에 직접 바인딩됩니다. 특수 프래그먼트는 getActivity()를 사용하여 활동 인스턴스에 액세스하고 활동 레이아웃에서 보기를 찾는 등의 작업을 쉽게 수행할 수 있습니다. 다음 코드에서와 같이:

View listView =getActivity().findViewById(R.id.list);

마찬가지로 활동은 findFragmentById() 또는 findFragmentByTag()를 사용하여 FragmentManager에서 조각에 대한 참조를 가져와 조각의 메서드를 호출할 수 있습니다.

ExampleFragment fragment =(ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);

4. 요약

마지막으로 Fragment의 예제에 대해 이야기해야 합니다. Android 관계자는 Fragment의 다양한 사용에 대한 데모 예제를 제공합니다. 예를 들어, 데모를 보고 싶으면 둘러볼 필요 없이 API Demo 프로그램만 보면 됩니다. 다양한 기능이 분리되고 다양한 클래스가 구현됩니다. 필요에 따라 특정 코드를 볼 수 있습니다.
조각 제어를 사용하여 여러 페이지를 전환하는 방법에 대한 더 많은 Android 기본 사항 및 관련 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.