SherlcokFargments按钮在一个片段中调用第二个片段

时间:2012-09-13 12:23:02

标签: android android-fragments actionbarsherlock

我正在试图找出片段是如何工作的。 我有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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

  

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

如果要在单击Fragment1中的按钮时将Fragment1替换为Fragment2:

(最佳做法)

  1. 您应该创建从fragment1到MainActivity的回调,如here
  2. 所述
  3. 进入MainActivity放置逻辑,它将fragment1替换为fragment2。
  4. (不良做法)

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

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