首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从碎片中打开碎片?

从碎片中打开碎片?
EN

Stack Overflow用户
提问于 2013-11-04 19:29:30
回答 3查看 748关注 0票数 0

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

代码语言:javascript
复制
FragmentLugaresLista frag = new FragmentLugaresLista();
Bundle args = new Bundle();
args.putString("gastronomyElementType", "Restaurants");
frag.setArguments(args);

ActivityContenedor asd = new ActivityContenedor();
asd.openFragment(frag);

将openFragment转换为ActivityContenedor的方法:

代码语言:javascript
复制
public void openFragment(Fragment fragmentToOpen) {
    FragmentManager manager = getFragmentManager();
    manager.beginTransaction()
    .replace(R.id.content_frame, fragmentToOpen).commit();
    mDrawerLayout.closeDrawer(mDrawerList);
}

我犯了一个错误:

代码语言:javascript
复制
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)

你能帮我一下吗?我将非常感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-04 21:51:45

如果您的片段仅作为ActivityContenedor的子片段存在,则可以这样做:

代码语言:javascript
复制
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);
}

而不是创建一个“新”活动(这从来不是创建一个活动的正确方式)。

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

票数 1
EN

Stack Overflow用户

发布于 2013-11-04 21:03:52

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

这个活动不是由系统创建的,也没有经历所有的活动生命周期。我假设“销毁”是创建活动的默认状态,在尝试向其添加片段时会检查此状态。

票数 1
EN

Stack Overflow用户

发布于 2013-11-04 21:58:37

  1. 您是否试图启动一个活动,其中包含一个新的片段?
  2. 您是否试图用替换--现有活动中的现有片段?
  3. 你想做什么?)

从不Activity a = new Activity();创建新活动

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

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

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

不要让事情变得复杂,在这种情况下不应该是这样的:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19775498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档