gpt4 book ai didi

java - 将第二个 Fragment 添加到 ActionBarActivity 时出现 "Duplicate id, tag null, or parent id 0x0 with another fragment"

转载 作者:行者123 更新时间:2023-12-02 06:00:41 29 4
gpt4 key购买 nike

当我尝试在主 ActionBarActivity 中添加新 fragment 时,出现“java.lang.IllegalArgumentException:二进制 XML 文件行 #3:重复 id 0x7f05003f、标记为 null 或父 id 0x0 与另一个 fragment ”错误。

主要错误是 android.view.InflateException:二进制 XML 文件行 #3:错误膨胀类 fragment 错误,位于我的 PlaceDetailsFragment 类的返回行上。

目标:在第一个 SupportMapFragment 之上获得第二个 Fragment,覆盖其约 30%。

main.java

public class Main extends ActionBarActivity{

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


if (findViewById(R.id.fragment_container) != null) {

if (savedInstanceState != null) {
return;
}

FragmentTransaction mTransaction = getSupportFragmentManager()
.beginTransaction();
SupportMapFragment mapFragmentSupportClass = new MapFragmentClass();
mTransaction.add(R.id.fragment_container, mapFragmentSupportClass);
mTransaction.commit();

FragmentTransaction xTransaction = getSupportFragmentManager().beginTransaction();
PlaceDetailsFragment placeDetailsFragment = new PlaceDetailsFragment();
xTransaction.add(R.id.fragment_container, placeDetailsFragment);
xTransaction.commit();
}
}

PlaceDetailsFragment.java 这是应用程序崩溃的地方,位于返回行。

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class PlaceDetailsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.details, container, false);

}
}

main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >

</FrameLayout>

mapfragment.xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"
/>

详细信息.xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"
android:layout_height="200dp"
android:id="@+id/details"
android:name="com.qstudios.whatsopenlate.PlaceDetailsFragment"
android:tag="detailsTag"
/>

据我所知,我没有使用重复的 id 或标签,因此留下了 fragment 与 mapFragment(主要的fragment_container)共享的父 id。为什么这是个问题。 parent 拥有相同的 ID 这不是合乎逻辑的吗?另外,这不是 NestedFragment,对吗?我使用 ActionBarActivity 和 FrameLayout 来放入 fragment 。

这个错误已经让我的生产力停止了 2 个小时,我在 google 上找到的所有答案都是关于 ActionBarSherlock、嵌套 fragment 等。没有人能提供一个简单的解释或示例来说明如何正确地将 2 个 fragment 放入一个框架布局。偶https://developer.android.com/training/basics/fragments/fragment-ui.html没有解释如何执行此操作。

任何人有这方面的经验,并且知道我做错了什么以及如何解决它?

提前致谢!

最佳答案

正如您自己或多或少发现的那样,问题出在 <fragment> 的方式上。标签在details.xml中使用。根据 Android documentation :

An activity's layout XML can include <fragment> tags to embed fragment instances inside of the layout.

基本上,您试图使用该标签作为 fragment 的实际布局,而它要做的就是将现有 fragment (已经有自己的布局)嵌入到其他 View 中。因此,正确的解决方案确实是为 fragment 构建布局(例如评论中提到的RelativeLayout),而不使用 <fragment> .

如果您想将您创建的 fragment 添加到其他布局(例如 main.xml),您可以使用 <fragment>来引用它。例如,main.xml 可以重写为:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<fragment
android:layout_width="match_parent"
android:layout_height="200dp"
android:id="@+id/details"
android:name="com.qstudios.whatsopenlate.PlaceDetailsFragment"
android:tag="detailsTag" />

</FrameLayout>

在这种情况下,您可以从 main.java 中删除以下部分:

FragmentTransaction xTransaction = getSupportFragmentManager().beginTransaction();
PlaceDetailsFragment placeDetailsFragment = new PlaceDetailsFragment();
xTransaction.add(R.id.fragment_container, placeDetailsFragment);
xTransaction.commit();

但是,如果您选择使用 FragmentManager 以编程方式添加 fragment (正如您所做的那样),则根本不需要使用该标记。

这一切都在 Fragments 中得到了很好的解释。 API 指南(特别是有关向 Activity 添加 fragment 的部分),我强烈建议您阅读。

关于java - 将第二个 Fragment 添加到 ActionBarActivity 时出现 "Duplicate id, tag null, or parent id 0x0 with another fragment",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22702967/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com