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