如何从另一个片段运行片段

时间:2014-09-30 20:36:37

标签: android android-fragments

我有一个主要活动(活动1),它会导航导航抽屉(列表视图列出项目)。抽屉由片段(MenuFragment)运行,这样我就可以根据选择的项目来扩展任何xml布局。现在我的问题是当用户从抽屉中选择一个项目时,如何运行另一个活动(活动2),因为抽屉是由MenuFragment运行的,我可以从片段开始活动。任何帮助都非常感谢。提前谢谢。

3 个答案:

答案 0 :(得分:1)

你永远不应该从另一个片段调用片段。 Communication between fragments应该通过活动。

看一下这个SO thread。希望这会有所帮助。

答案 1 :(得分:0)

此类问题的常见模式是为每个片段提供一个侦听器接口,当片段中的某些内容发生时,需要通知Activity。

所以你的菜单片段看起来像是:

public class MenuFragment extends Fragment
{
    public interface Listener
    {
        void onDrawerItemSelected();
    }

    private Listener listener;

    public void setListener(Listener listener)
    {
        this.listener = listener;
    }

    // When drawer item selected, do something like
    //
    // if (listener != null)
    // {
    //    listener.onDrawerItemSelected();
    // }
}

您的活动看起来像是:

public class TestActivity extends Activity implements MenuFragment.Listener 
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // MenuFragment fragment = ...;
        // fragment.setListener(this);
    }

    @Override
    public void onDestroy()
    {
        // MenuFragment fragment = ...;
        // fragment.setListener(null);
        super.onDestroy();
    }

    @Override
    public void onDrawerItemSelected()
    {
        // TODO launch other activity here
    }
}

实质上,让你的活动驱动节目。

答案 2 :(得分:0)

使用界面

Communicating between a fragment and an activity - best practices.

您需要从片段中创建活动的界面。类似的东西:

public class MainActivity extends FragmentActivity implements MainFragment.getCommunication {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

//called from the MainFragment
@Override
public void TalkToMe() {

    MainFragment MainFrag = (MainFragment)getFragmentManager().findFragmentById(R.id.fragment_main);
    MainFrag.MyMainFragmentMethod();

    OtherFragment OtherFrag = (OtherFragment)getFragmentManager().findFragmentById(R.id.fragment_Other);
    OtherFrag.MyMainFragmentMethod();



}

}

片段类

public class MainFragment extends Fragment {

//interface to the MainActivity activity class
  private getFragmentCommunication listener;

  public interface getCommunication {
      public void TalkToMe();

  }

}

以下是一篇很好的文章:http://www.vogella.com/articles/AndroidFragments/article.html