2016-09-22 4 views
-6

저는 활동이 있는데, 그 활동 안에 조각이 있습니다.
해당 조각에는
으로 변경된 OnClick 메서드가 있습니다.
내부에서 onclick 메서드를 사용하여 내부에서보기를 변경하는 것
동일한 활동을 조각화하고 사용합니다.
enter image description here활동 내 조각을 조각 내로 변경하십시오.

지금까지 내가 할 수있는 것입니다. 방법은 아래

Fragment mFragment = null; 
     Class fragmentClass; 
     fragmentClass = LoginSignup.class; 
     try { 
      mFragment = (Fragment) fragmentClass.newInstance(); 
     } catch (Exception mE) { 
      Log.e(TAG, mE.toString()); 
     } 

     FragmentManager mFragmentManager = getSupportFragmentManager(); 
     mFragmentManager.beginTransaction().replace(R.id.frameLayout, mFragment).commit(); 
+1

그래서 문제가 무엇인가? – Piyush

+0

첫 번째 조각 내에서 활동 조각을 변경해야합니다. –

+0

동일한보기에서 조각에서 활동을 변경할 수 없습니다. 대신 당신은 자식 조각을 호출 할 수 있습니다! – Piyush

답변

1

사용

public static void openFragment(FragmentManager manager, Fragment targetFragment) { 

    try { 

     String fragmentName = targetFragment.getClass().getName(); 
     manager.popBackStack(); 
     manager.beginTransaction() 
       .replace(R.id.frameLayout, targetFragment, fragmentName) 
       .addToBackStack(fragmentName) 
       .commit(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

호출이 방법 당신은 당신의 조각을 열 때마다. 이 메소드에 두 개의 매개 변수를 전달해야합니다. targetFragment은 열려는 프래그먼트입니다.

+0

이것은 greate입니다. 고마워요. 이것은 내가 찾고있는 것입니다. 감사합니다 –

1

나는 항상 EventBus 통지 활동을 사용하거나 조각을 변경하기 위해 인터페이스를 구현합니다.

인터페이스 :

public interface LoginViewInterface { 

    void moveToLoginView(); 

    void moveToInsertView(); 
} 

활동 :

public class LoginActivity implements LoginViewInterface { 

    private FragmentManager manager; 
    private FragmentTransaction transaction; 
    private List<BaseFragment> fragmentList; 
    private LoginFragment loginFragment; 
    private InsertFragment insertFragment; 

    private void InitFragment(){ 
     manager = getFragmentManager(); 
     insertFragment = (LogModeFragment) manager.findFragmentById(R.id.login_insert); 
     loginFragment = (LoginFragment) manager.findFragmentById(R.id.login_login); 
     insertFragment.InitInterface(this); 
     loginFragment.InitInterface(this); 
     fragmentList = new ArrayList<>(); 
     fragmentList.add(loginFragment); 
     fragmentList.add(insertFragment); 
     transaction = manager.beginTransaction().hide(fragmentList.get(0)) 
       .hide(fragmentList.get(1)); 
     transaction.show(fragmentList.get(0)). commitAllowingStateLoss(); 
    } 


    @Override 
    public void moveToLoginView() { 
     transaction.hide(fragmentList.get(0)); 
     transaction.show(fragmentList.get(1)); 
     transaction.commitAllowingStateLoss();  
    } 

    @Override 
    public void moveToInsertView() { 
     transaction.hide(fragmentList.get(1)); 
     transaction.show(fragmentList.get(0)); 
     transaction.commitAllowingStateLoss(); 
    } 
} 

조각 :

class InsertFragment extends BaseFragment{ 
    LoginViewInterface dataInterface; 
    public void InitInterface(LoginViewInterface dataInterface) { 
     this.dataInterface = dataInterface; 
    } 

    private doChange(){ 
     dataInterface.moveToInsertView(); 
    } 
} 
+0

고마워요. 나는 이미 답을 얻었다. 그러나 나쁘게 이것을 한번보세요. 그것은 미래에 나를 도울 것입니다. 감사 :) –