Android:难以在片段

时间:2015-08-03 23:27:15

标签: android android-fragments

所以,我之前问了一个问题,得到了一些帮助,但最终,我认为我需要更清楚。

基本上,我有一个应用程序。主要活动是选项卡式活动/滑动视图。第一页由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,尤其是当代码在片段里面时片段。

如果需要澄清,请询问。谢谢你的帮助!

1 个答案:

答案 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();

}