2016-09-22 102 views
-6

我有一個活動,在該活動中我有片段。
該片段有OnClick方法,應該
更改爲另一個視圖。
我想要的是使用
Fragment中的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

這很大。謝謝先生。這正是我所期待的。謝謝 –

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

謝謝先生。我已經得到了答案。但我也看看這個。它可能在未來幫助我。謝謝 :) –