0

我试图弄清楚片段是如何工作的。我有 3 个类,MainActivity、Fragment1 和 Fragment2。

MainActivity 扩展了 SherlockFragmentActivity 和

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Fragment1 firstFragment = new Fragment1();
    firstFragment.setArguments(getIntent().getExtras());
    getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container1, firstFragment).commit();

现在,我将 Fragment1 加载到我的 fragment_container 中,它显示得很好。

(所以 main_activity.xml 只有一个)

好的,Fragment1 扩展了 SherlockFragment,然后什么都不做

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    return inflater.inflate(R.layout.fragment1layout, container, false);

所以我只是从我的 .xml 中膨胀它,它有一个文本视图和一个按钮。

现在我可以在世界上的哪个地方实例化 Button,并给他代码用 Fragment2 替换 Fragment1?

代码是什么,因为我现在“在 Fragment1 中”,所以我需要以某种方式与 Fragment holder 沟通并告诉它“用 Fragment2 替换我”。

Fragment2 还扩展了 SherlockFragment,并且什么都不做,将其膨胀为空的 .xml

4

2 回答 2

1

您必须从 fragment1 调用您的 fragment2,如下所示

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.fragment1layout, container, false);
            Button button = (Button)view.findViewById(R.id.yourButton);
            button.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    //Replace your fragment

                }
            });
        return view;
}
于 2012-09-13T12:31:00.710 回答
0

我现在“在 Fragment1 中”,所以我需要以某种方式与 Fragment holder 沟通并告诉它“用 Fragment2 替换我”。

如果您想在单击进入 Fragment1 的按钮时将 Fragment1 替换为 Fragment2:

(最佳实践)

  1. 您应该像这里描述的那样创建从 fragment1 到 MainActivity 的回调
  2. 进入 MainActivity 放置逻辑,将片段 1 替换为片段 2。

(不良做法)

  1. 创建MainActivity将一个片段替换为另一个片段的方法,例如changeFirstFragmentToAnother()
  2. 那么当您需要将 fragment1 更改为 fragment2 时,您可以手动(从 fragment1)调用此方法,如下所示:

    ((MainActivity)getActivity()).changeFirstFragmentToAnother();

于 2012-09-13T13:00:48.413 回答