Android 从碎片中打开碎片?

Android 从碎片中打开碎片?,android,eclipse,android-fragments,exception,fragment,Android,Eclipse,Android Fragments,Exception,Fragment,我已经在其他类似的问题上搜索过了,但我无法解决它。我的问题是我无法从另一个片段中打开片段,我正在这样做: FragmentLugaresLista frag = new FragmentLugaresLista(); Bundle args = new Bundle(); args.putString("gastronomyElementType", "Restaurants"); frag.setArguments(args); ActivityContenedor asd = new Ac

我已经在其他类似的问题上搜索过了,但我无法解决它。我的问题是我无法从另一个片段中打开片段,我正在这样做:

FragmentLugaresLista frag = new FragmentLugaresLista();
Bundle args = new Bundle();
args.putString("gastronomyElementType", "Restaurants");
frag.setArguments(args);

ActivityContenedor asd = new ActivityContenedor();
asd.openFragment(frag);
方法将openFragment转换为ActivityContendor:

public void openFragment(Fragment fragmentToOpen) {
    FragmentManager manager = getFragmentManager();
    manager.beginTransaction()
    .replace(R.id.content_frame, fragmentToOpen).commit();
    mDrawerLayout.closeDrawer(mDrawerList);
}
我有一个错误:

11-04 16:23:38.731: E/AndroidRuntime(20705): FATAL EXCEPTION: main
11-04 16:23:38.731: E/AndroidRuntime(20705): java.lang.IllegalStateException: Activity     has been destroyed
11-04 16:23:38.731: E/AndroidRuntime(20705):    at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1299)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at android.app.BackStackRecord.commitInternal(BackStackRecord.java:541)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at android.app.BackStackRecord.commit(BackStackRecord.java:525)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at com.example.despegarteproject.ActivityContenedor.openFragment(ActivityContenedor.java:113)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at com.example.despegarteproject.FragmentLugares$GridViewListener.onItemClick(FragmentLugares.java:242)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at android.widget.AdapterView.performItemClick(AdapterView.java:292)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at android.widget.AbsListView.performItemClick(AbsListView.java:1068)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2525)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at android.widget.AbsListView$1.run(AbsListView.java:3186)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at android.os.Handler.handleCallback(Handler.java:605)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at android.os.Handler.dispatchMessage(Handler.java:92)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at android.os.Looper.loop(Looper.java:137)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at android.app.ActivityThread.main(ActivityThread.java:4448)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at java.lang.reflect.Method.invokeNative(Native Method)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at java.lang.reflect.Method.invoke(Method.java:511)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
11-04 16:23:38.731: E/AndroidRuntime(20705):    at dalvik.system.NativeStart.main(Native Method)

你能帮我吗?我将非常感激

看起来您正在创建一个新活动并试图在其上添加一个片段,但您只使用它的公共构造函数,而不是上下文类中的任何“startActivity”方法


此活动不是由系统创建的,也没有贯穿整个活动生命周期。我假设“destroyed”是创建活动的默认状态,当您尝试向其添加片段时,会检查此状态。

看起来您正在创建一个新活动并尝试在其上添加片段,但您只使用它的公共构造函数,而不使用上下文类中的任何“startActivity”方法


此活动不是由系统创建的,也没有贯穿整个活动生命周期。我假设“destroyed”是创建活动的默认状态,当您尝试向其添加片段时,会检查此状态。

看起来您正在创建一个新活动并尝试在其上添加片段,但您只使用它的公共构造函数,而不使用上下文类中的任何“startActivity”方法


此活动不是由系统创建的,也没有贯穿整个活动生命周期。我假设“destroyed”是创建活动的默认状态,当您尝试向其添加片段时,会检查此状态。

看起来您正在创建一个新活动并尝试在其上添加片段,但您只使用它的公共构造函数,而不使用上下文类中的任何“startActivity”方法


此活动不是由系统创建的,也没有贯穿整个活动生命周期。我假设“已销毁”是创建活动的默认状态,当您尝试向其添加片段时,会选中此状态。

如果您的片段仅作为
ActivityContendor
的子级存在,您可以执行以下操作:

Activity parent = getActivity();
if (parent != null 
    && !parent.isFinishing() 
    && parent instanceof ActivityContenedor) {
    FragmentLugaresLista frag = new FragmentLugaresLista();
    Bundle args = new Bundle();
    args.putString("gastronomyElementType", "Restaurants");
    frag.setArguments(args);

    ((ActivityContenedor) parent).openFragment(frag);
}
而不是创建“新”活动(这永远不是创建活动的正确方法)


这将获取对此片段所附加到的活动的引用,将其强制转换到您的
ActivityContendor
类,然后您就得到了一个有效实例,您可以调用
openFragment
方法。

如果您的片段仅作为
ActivityContendor
的子级存在,您可以执行以下操作:

Activity parent = getActivity();
if (parent != null 
    && !parent.isFinishing() 
    && parent instanceof ActivityContenedor) {
    FragmentLugaresLista frag = new FragmentLugaresLista();
    Bundle args = new Bundle();
    args.putString("gastronomyElementType", "Restaurants");
    frag.setArguments(args);

    ((ActivityContenedor) parent).openFragment(frag);
}
而不是创建“新”活动(这永远不是创建活动的正确方法)


这将获取对此片段所附加到的活动的引用,将其强制转换到您的
ActivityContendor
类,然后您就得到了一个有效实例,您可以调用
openFragment
方法。

如果您的片段仅作为
ActivityContendor
的子级存在,您可以执行以下操作:

Activity parent = getActivity();
if (parent != null 
    && !parent.isFinishing() 
    && parent instanceof ActivityContenedor) {
    FragmentLugaresLista frag = new FragmentLugaresLista();
    Bundle args = new Bundle();
    args.putString("gastronomyElementType", "Restaurants");
    frag.setArguments(args);

    ((ActivityContenedor) parent).openFragment(frag);
}
而不是创建“新”活动(这永远不是创建活动的正确方法)


这将获取对此片段所附加到的活动的引用,将其强制转换到您的
ActivityContendor
类,然后您就得到了一个有效实例,您可以调用
openFragment
方法。

如果您的片段仅作为
ActivityContendor
的子级存在,您可以执行以下操作:

Activity parent = getActivity();
if (parent != null 
    && !parent.isFinishing() 
    && parent instanceof ActivityContenedor) {
    FragmentLugaresLista frag = new FragmentLugaresLista();
    Bundle args = new Bundle();
    args.putString("gastronomyElementType", "Restaurants");
    frag.setArguments(args);

    ((ActivityContenedor) parent).openFragment(frag);
}
而不是创建“新”活动(这永远不是创建活动的正确方法)

这将获取对此片段所附加到的活动的引用,将其强制转换为
ActivityContendor
类,然后您就得到了一个可以调用
openFragment
方法的有效实例

  • 您是否正在尝试启动包含片段的活动

  • 您是否试图替换现有活动中的现有片段

  • 你想做什么?:)

  • 绝不使用
    活动a=新活动()创建新活动

    话虽如此,从一个片段转到另一个片段的理想方法取决于您是否要更改活动

    如果您可以更改它,那么只需通过Intent向活动传递一个值,这样它就可以在创建片段时启动它

    如果不想更改活动,只需执行FragmentTransaction来替换片段

    不要让事情复杂化,在这种情况下不应该如此:)

  • 您是否正在尝试启动包含片段的活动

  • 您是否试图替换现有活动中的现有片段

  • 你想做什么?:)

  • 绝不使用
    活动a=新活动()创建新活动

    话虽如此,从一个片段转到另一个片段的理想方法取决于您是否要更改活动

    如果您可以更改它,那么只需通过Intent向活动传递一个值,这样它就可以在创建片段时启动它

    如果不想更改活动,只需执行FragmentTransaction来替换片段

    不要让事情复杂化,在这种情况下不应该如此:)

  • 您是否正在尝试启动包含片段的活动

  • 您是否试图替换现有活动中的现有片段

  • 你想做什么?:)

  • 绝不使用
    活动a=新活动()创建新活动

    话虽如此,ide