每当我在" 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
答案 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不相关