2016-08-05 5 views
2

나는 잠시 동안 이렇게 해왔다. 맞습니까?다른 조각에서 조각을 팽창시키는 올바른 방법은 무엇입니까?

활동 :

((Activity_Main)getActivity()).toSettings(); 
+1

IMHO 인터페이스를 사용하는 경향이 있지만,이 경우에는 호스팅 활동을 통해 통신하는 것이 잘못되었습니다. FragmentManager에서 FragmentManager를 사용했다면 getChildFragmentManager가 될 것입니다. 예를 들어 중첩 된 ViewPager가있는 Fragment가있을 것입니다. 내가 말했듯이, 내 견해, 다른 것은 다를 수있다. 그러나 나는 그것이 자신의 Activity에있는 것과 관련성이있는 설정 화면이라는 것을 알 수 있다고 주장 할 수 있습니다. –

답변

0

당신은 그냥 그 부분을 삭제 .addToBackStack(null) 필요하지 않습니다 당신의 조각이 가기 backstack에 추가되지 않습니다 : 다른 조각의 일부 리스너에서

public void toSettings(){ 
    Fragment_Settings frag = new Fragment_Settings(); 
    fm.beginTransaction() 
      .replace(R.id.mainContainer, frag) 
      .addToBackStack(null) 
      .commit(); 
    } 

. 나 또한 나중에 조각을 검색하려는 경우에 대비하여 replace 메소드에 TAG를 추가하는 것이 좋습니다. 이 같은 것 .replace(R.id.mainContainer, frag, TAG).

0

올바른 것처럼 보이지만 몇 가지 제안 사항이 있습니다.

  1. 당신은 Fragment_Settings 사용 add 대신 replace의 방법 대신 addToBackStack(null)addToBackStack("tag of Fragment_Settings")에서 이전의 조각을 다시 싶어합니다.
  2. newInstance 패턴이 Fragment_Settings frag = new Fragment_Settings();보다 더 바람직하다. 그것에 대한 설명을 볼 수 있습니다. 조각 사이를 탐색 할 때 http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html
    Creating a Fragment: constructor vs newInstance()
  3. 하면, 관리자 클래스를 추가 구성을 제공 사용할 교체하거나 팝업 프로세스 수있는 코드의 반복을 피하기합니다. Here is my navigation manager class.
관련 문제