2015-04-02 48 views
-1

我想膨胀一个布局,其中包含一个在其中声明的片段。该布局然后作为子视图添加到framelayout。尽管片段正确膨胀,但我根本无法搜索片段。使用布局xml动态地膨胀一个片段,找不到片段

class Activity1 extends Activity { 
    public void onCreate(...){ 
    setContentView(R.layout.container); 
    mContainer = findViewId(R.id.container); 
    } 

    public void OnClick(...){ 
    LayoutInflater.from(this).inflate(R.layout.child, mContainer); 
    Fragment f =getSupportFragmentManager().findFragmentById(R.id.container); 
    //f is always null 
    } 
} 

layout.container 
<FrameLayout android:id="@+id/container" .../> 

layout.child 
<fragment android:name="com.example.child" .../> 

我错过了什么吗?

我想我找到了问题,

这是fragmentmanager代码

View parent = null; 
int containerId = parent != null ? parent.getId() : 0 
fragment.mFragmentId = id != 0 ? id : containerId; 

,所以我想利用布局吹气以同样的方式不起作用如添加使用FragmentManager片段膨胀片段

+0

所以我发现了一些有趣的东西,片段管理器只能通过这种方式获取片段膨胀,如果它们是从片段而不是从ListFragment派生的。 所以现在剩下的唯一一点是,为什么使用这种方式膨胀的碎片不能用id搜索,因为容器的id应该成为framgner的id。 – user210504

回答

0

您需要在java代替其容器中提供<fragment />元素的标识。

给你的片段作为下面的XML布局内的一些ID:

<fragment android:id="@+id/myFragment" 
      android:name="com.example.child" .../> 

访问如下的片断:

Fragment f =getSupportFragmentManager().findFragmentById(R.id.myFragment); 

这会给你的布局正确非空片段。

+0

这个解决方案的工作原理与我所问的无关。 -1只是为了无关紧要地在这里问 – user210504

+0

我已经回答了你所问的问题..你在我的回答后编辑了你的问题细节。在这种情况下,回答者不能跟踪问题是否改变 – Kushal

+0

我编辑的是答案:) – user210504

相关问题