如何在按钮单击该片段时替换片段?

Top*_*Cat 13 android android-fragments android-activity

我有一个包含多个片段的活动.Activity最初有片段,里面有两个按钮.单击此按钮后,我必须用新片段替换片段.每个片段都有各种小部件,并将当前片段替换为各种事件.

这是我的问题.我怎样才能做到这一点.

建议我的想法.

Ahm*_*aza 18

你可以用FragmentTransaction替换片段.

干得好.

建立一个界面.

public interface FragmentChangeListener 
{
    public void replaceFragment(Fragment fragment); 
}
Run Code Online (Sandbox Code Playgroud)

使用此接口实现Fragment保持活动.

public class HomeScreen extends FragmentActivity implements
        FragmentChangeListener {


         @Override
         public void replaceFragment(Fragment fragment) {
            FragmentManager fragmentManager = getSupportFragmentManager();;     
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(mContainerId, fragment, fragment.toString());
            fragmentTransaction.addToBackStack(fragment.toString());
            fragmentTransaction.commit();   
    }

}
Run Code Online (Sandbox Code Playgroud)

像这样从片段中调用此方法.

//在你的片段中

public void showOtherFragment()
{
       Fragment fr=new NewDisplayingFragment();
             FragmentChangeListener fc=(FragmentChangeListener)getActivity();
             fc.replaceFragment(fr);
}
Run Code Online (Sandbox Code Playgroud)

希望这会奏效!

注意:mContainerId是持有片段内部的视图的id.你也应该重写Fragment的onString()方法.


小智 6

好吧,即使我正在学习android...

我最近解决了同样的问题,“如何在按钮的点击事件上更改片段”。

buttonName.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        FragmentTransaction fragmentTransaction = getActivity()
            .getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.frame1, new Homefragment());
        fragmentTransaction.commit();
    }
});
Run Code Online (Sandbox Code Playgroud)

frame1FrameLayout在我的 DrawerLayer 的 XML 中定义的id 。

所以现在每当我想要片段交易时,我都会使用此代码。每次它都会替换frame1你最后一个片段的状态。

FragmentTransaction fragmentTransaction = getActivity()
        .getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame1, new newfragment());
fragmentTransaction.commit()
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助..