Android - 片段与android:id的不同id

时间:2016-06-19 21:11:14

标签: android android-layout android-fragments

每当我在" OnCreateView"中调用inflate方法时在Fragment类中,我希望得到一个带有android:id值中指定ID的片段。 但我得到一个不同的id,与containerID相同。

我试图以编程方式在relativeLayout中添加片段,对于此处显示的示例,我有两个片段,其中一个必须设置RelativeLayout.BELOW参数。

以下是topsection片段(ts_fragment)的代码:

xml看起来像这样:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:id="@+id/ts_fragment">
.
.-->other stuff
.

以下是添加片段的代码:

  public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {

    View view=inflater.inflate(fragmentLayout,container,false);

    setGraphics(view); //custom function which gets views and sets gui.

    return view;
}

视图获取&#34; fragmentLayout&#34;的ID,但片段获取一个不同的ID,即容器一,这使得我的片段在另一个上面而不区分id。

如何避免这种情况?感谢。

修改

我尝试使用类似:topFragment.getId()的东西,但它返回containerID。 javadoc说:

  

返回此片段已知的标识符。这是要么   android:在布局或容器视图ID中提供的id值   添加片段时提供。

我只是不想要容器视图ID,有没有办法强制片段拥有android:id值?

更新

尝试打印不同的ID:

My_Android: Main layout has id: 2131492958 //R.id.MainLayout ->ContainerID
My_Android: MyTopFragment{5cd93c9} - id: 2130968617 //R.id.ts_fragment value
My_Android: MyBottomFragment{2055ace} - id: 2130968601 //R.id.bs_fragment value

My_Android: MyTopFragment has ID: 2131492958 //After inflating process, the fragment gets this id, the same of R.id.MainLayout
My_Android: MyBottomFragment has ID: 2131492958 //Idem

2 个答案:

答案 0 :(得分:1)

<强>解决

这里的关键是我的gui设置中的错误。顶部片段设置为WIDTH和HEIGHT的MATCH PARENT!所以没有机会让第二个人出现。

也就是说,设置WRAP_CONTENT,至少对于第一片段的LayoutParams中的HEIGHT参数,可以使事情有效。

不需要片段ID,重要的是知道FRAGMENT VIEW&#39; ID。

答案 1 :(得分:0)

使用fragment.setTag() 默认情况下,片段具有容器的ID。 Android:id是片段中视图的ID。标签和片段ID不相关