所以,我之前问了一个问题,得到了一些帮助,但最终,我认为我需要更清楚。
基本上,我有一个应用程序。主要活动是选项卡式活动/滑动视图。第一页由Main_Fragment组成,Main_Fragment由其中的两个其他片段(A和B)组成。片段A包含一个按钮,我按下时会尝试使用该按钮,将启动一个不同的片段,以便在片段A和B的顶部,替换它们或Main_fragment。
我遇到的问题是我需要为Fragment Transaction使用什么代码。以前我使用这段代码,当Main_Fragment只是一个活动时,它运作良好,但现在我不确定我需要做什么。
FragmentManager fm = getFragmentManager();
fragment = new DayViewFragment();
FragmentTransaction ft = fm.beginTransaction();
ft.addToBackStack(null);
ft.add(android.R.id.content, fragment);
ft.commit();
首先我认为我需要以某种方式使用getParentFragment(),我不确定如何,其次我不确定什么替换android.R.id.content,尤其是当代码在片段里面时片段。
如果需要澄清,请询问。谢谢你的帮助!
答案 0 :(得分:1)
我认为实现此类功能的最佳方法是使用从Fragment到Activity的接口回调。
如果检查“包含接口回调?”,Android Studio 1.2.2甚至会自动创建接口回调代码。创建新片段时的复选框。
以下是Fragment的一般代码结构:
public class MainActivityFragment extends Fragment {
private OnMainFragmentInteractionListener mListener;
private Button exampleButton;
public MainActivityFragment() {
}
public static MainActivityFragment newInstance() {
MainActivityFragment fragment = new MainActivityFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
exampleButton = (Button) rootView.findViewById(R.id.button);
exampleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.buttonClicked("test value");
}
});
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnMainFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnMainFragmentInteractionListener");
}
}
public interface OnMainFragmentInteractionListener {
void buttonClicked(String val);
}
}
然后Activity将实现接口:
public class MainActivity extends FragmentActivity
implements MainActivityFragment.OnMainFragmentInteractionListener {
并实现接口方法:
@Override
public void buttonClicked(String val) {
FragmentManager fm = getFragmentManager();
fragment = new DayViewFragment();
FragmentTransaction ft = fm.beginTransaction();
ft.addToBackStack(null);
ft.add(android.R.id.content, fragment);
ft.commit();
}