2016-09-22 76 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

谢谢先生。我已经得到了答案。但我也看看这个。它可能在未来帮助我。谢谢 :) –