我有一个包含多个片段的活动。 Activity最初有片段,里面有两个按钮。单击此按钮后,我必须用新片段替换片段。每个片段都有各种小部件,并将当前片段替换为各种事件。
这是我的问题。我怎样才能做到这一点。
建议我的想法。
答案 0 :(得分:16)
你可以用FragmentTransaction替换片段。
你走了。
制作界面。
public interface FragmentChangeListener
{
public void replaceFragment(Fragment fragment);
}
使用此界面实现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();
}
}
从像这样的片段中调用此方法。
//在你的片段中。
public void showOtherFragment()
{
Fragment fr=new NewDisplayingFragment();
FragmentChangeListener fc=(FragmentChangeListener)getActivity();
fc.replaceFragment(fr);
}
希望这会奏效!
注意:mContainerId是视图的id,其中包含片段。 您也应该覆盖Fragment的onString()方法。
答案 1 :(得分:4)
即使我正在学习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();
}
});`
这里“frame1”是我在DrawerLayer的XML中定义的“FRAMELAYOUT”的id。
所以现在每当我想要片段事务时,我都会使用这个代码。每次它都会替换你最后一个片段的frame1。
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame1,new newfragment());
fragmentTransaction.commit()
希望这会有所帮助..
答案 2 :(得分:2)
您可以使用以下命令替换片段上的片段:
getFragmentManager().beginTransaction().replace(R.id.main_content, new insertFragmentNameHere()).addToBackStack(null).commit();
答案 3 :(得分:1)
changeFragment()
)(或调用另一个将完成工作的方法)来更改片段)。答案 4 :(得分:1)
从2017年及以后的未来,存在使用 Bus 触发事件的不同库,现在您可以使用它来告诉活动何时触发事件它拥有的片段。
参考:
您可以查看Google建议的新架构
不要在接受的答案中使用这种方法,从片段
中获得超过3种不同的事件会变得非常难看答案 5 :(得分:0)
您可以尝试使用此代码,该代码对我来说效果很好,可以放大布局以查看,定义按钮并单击,
Button btn_unstable;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home,container,false);
btn_unstable = (Button)view.findViewById(R.id.btn_unstable);
btn_unstable.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_replace, new UnstableFragment()).commit();
}
});
return view;
}