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

Android 如何从另一个片段运行片段,android,android-fragments,Android,Android Fragments,我有一个主要活动(活动1),它为导航抽屉充气(带有列出项目的listview)。抽屉由一个片段(MenuFragment)运行,这样我就可以根据所选的项目展开任何xml布局。现在我的问题是,当用户从抽屉中选择一个项目时,如何运行另一个活动(活动2),因为抽屉由MenuFragment运行,我可以从一个片段启动活动。非常感谢您的帮助。提前感谢。这类问题的一种常见模式是为每个片段提供一个侦听器接口,在该接口中,当片段中发生某些事情时,需要通知活动 因此,您的菜单片段可能看起来像: public cl

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

这类问题的一种常见模式是为每个片段提供一个侦听器接口,在该接口中,当片段中发生某些事情时,需要通知活动

因此,您的菜单片段可能看起来像:

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
    }
}
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 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
    }
}
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 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
    }
}
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();

  }

}

这里有一篇关于这方面的好文章:。

您不应该从另一个片段调用片段。应该是通过活动

看看另一个。希望这有帮助