从碎片内部替换碎片



我在网上读到,要调用另一个片段,要使用FrameLayout,你需要创建一个与活动对话的界面,当按钮点击时,活动中定义的界面内的函数会用另一个碎片替换片段,但我没有创建界面,而是尝试直接从片段内执行,结果成功了。那么,我为什么不应该这样做呢?

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class FragmentOne extends Fragment {

public FragmentOne() {
// Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_fragment_one, container, false);
Button btnONe = view.findViewById(R.id.btnOne);
btnONe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onButtonPressed();
}
});
return view;
}
public void onButtonPressed() {
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragmentContainer, new FragmentTwo("Femin Dharamshi did it!"));
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}

片段是"活动"的一部分,片段应通过其父活动托管,如谷歌在Android开发人员文档中所述。您可以参考此链接:-https://developer.android.com/training/basics/fragments/communicating

您应该在onViewCreated()方法中调用getFragmentManager().beginTransaction().replace(int id, Fragment fr).commit();,而不是onCreateView()方法。

只需将onCreateView()中的代码移动到onViewCreated()方法中即可。

最新更新