将一个片段替换为另一个片段

问题描述:

我有一个Activity并在RelativeLayout中打开一个Fragment A。之后,当我点击打开Fragment B相同RelativeLayout里面给出以下错误将一个片段替换为另一个片段

" java.lang.IllegalArgumentException: No view found for id 0x7f0d00cf (com.healthiera.mobile:id/Content_id_) for fragment CompAndSymp{21e51fb8 #1 id=0x7f0d00cf} 
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1102)" 

我认为问题是,我想在Activity打开Fragment B当我在Fragment A(不活动)。我不知道如何通过其他方式解决我的问题。请告诉我该怎么做。

我发现很多人有同样的问题,但我找不到解决方案。

这是我的代码,当我试图打开Fragment B inside Fragment A。仪表板是我的Fragment B

Dashboard dashboard = new Dashboard(); 
         getFragmentManager().beginTransaction().replace(R.id.Content_id_, dashboard).commit(); 

活动XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:orientation="vertical" android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/Content_id_"> 
    </RelativeLayout> 

    <com.aurelhubert.ahbottomnavigation.AHBottomNavigation 
     android:id="@+id/AHBottomNavigation_id" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:layout_alignParentBottom="true" 
     /> 
</RelativeLayout> 
+0

显示您的xml以及如何调用碎片,以便我们可以更快地帮助您。 –

+0

我只是编辑我的问题。谢谢。 – Butterfly

+0

你解决了这个问题? –

以下是解决方案。 将片段替换为另一个片段

Dashboard dashboard = new Dashboard(); getActivity()。getSupportFragmentManager()。beginTransaction()。replace(android.R.id.content,dashboard).commit();

您可以使用接口解决这个问题。

您可以创建一个扩展主要活动的接口。

public interface MyInterface(){ 
    void goToFragmentB(); 
} 

现在,在您的mainActivity你实现这个接口并且设置了虚空方法所需的方式与片段B.

更换碎片A在您的片段,你可以retrive活动。现在只需施放此活动MyInterface的:

MyInterface myInterface = (MyInterface) myActivityRetrieved; 

而且onButtonClick你可以叫

myInterface.goToFragmentB(); 

和你做。

希望这有助于

务必:

 getSupportFragmentManager().beginTransaction().replace(Fragmnet B) 

不要:超过其他同添加片段非法上下文之前。还有在行粘贴代码和异常,如果上面的代码不工作这样我们才能有更好的见解。

编辑:概念建设:

那么我就可以粘贴代码,可以帮助你reslove崩溃,但你所面临的问题是一个基本的Android概念是必须要知道的已经说了很多其他的失误是:

首先尝试使用的

​​

,而不是相对布局

现在,当活动拥有一个片段应该有AW ay在活动和片段之间进行交流 由于片段有其自己的生命周期,完全取决于活动的生命周期。你需要处理片段自己的生命周期,以保存数据并恢复其视图

在你的情况下,你需要通过父活动从片段A到片段B进行通信,所以活动需要通过片段管理器来更改为其他片段的回调 以下是几个环节,它可以帮助:需要时间来阅读这篇

link one

link two

link 3

link four 编码快乐:)

+0

我刚编辑我的代码。往上看。谢谢。 – Butterfly

+0

看到我编辑的答案..!这将有助于确保您缺少一些基本的Android概念 – DevKRos

+0

非常感谢您对我的理解。我会阅读你的链接,并希望这将解决我的问题。 – Butterfly

试试这个

Dashboard dashboard = new Dashboard(); 
getChildFragmentManager().beginTransaction().replace(R.id.Content_id_, dashboard).commit(); 

希望有所帮助。