【问题标题】:Cannot launch fragment: The specified child already has a parent无法启动片段:指定的孩子已经有一个父母
【发布时间】:2015-10-29 13:25:23
【问题描述】:

我遇到的“孩子已经有父母”错误与很多人所遇到的错误相似,但是,我正在做一些不同的事情(据我的搜索显示)。我假设我添加片段的方式不一定是错误的,但我一生都无法弄清楚我添加的片段如何已经有了一个父节点。

我使用要加载到 FrameLayout 中的片段从我的主要活动启动。这是我的主要活动中的 onCreate:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    realm = Realm.getDefaultInstance();

    if (savedInstanceState == null) {

    }

    tripsFragment = new CarTripsOverview();
    getSupportFragmentManager().beginTransaction().add(R.id.content_container, tripsFragment).commit();
}

下面是为 CarTripsOverview(它是一个片段)运行的方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getArguments() != null) {

    }

    setUpRealm();
}

void setUpRealm() {
    realm = Realm.getDefaultInstance();
    RealmQuery<Car> carQuery = realm.where(Car.class);
    RealmResults<Car> carResults = carQuery.findAll();
    carAdapter = new CarArrayAdapter(getActivity(),0, carResults, true);

    RealmQuery<Trip> tripQuery = realm.where(Trip.class);
    RealmResults<Trip> tripResults = tripQuery.findAll();
    tripAdapter = new TripAdapterRealm(getActivity(), 0, tripResults, true);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_car_trips_overview, container, true);

    // Bind all of the views with Butter Knife
    ButterKnife.bind(this, view);

    setUpSwipeMenu();

    // Add my event listeners
    tripListView.setAdapter(tripAdapter);

    carSpinner.setAdapter(carAdapter);

    return view;
}

void setUpSwipeMenu() {
    SwipeMenuCreator creator = new SwipeMenuCreator() {
        @Override
        public void create(SwipeMenu menu) {
            SwipeMenuItem deleteItem = new SwipeMenuItem(getContext());
            deleteItem.setBackground(new ColorDrawable(Color.RED));
            deleteItem.setWidth(MathHelper.dipToPixels(getContext(), 90));
            deleteItem.setTitle("Delete");
            deleteItem.setTitleColor(Color.WHITE);
            deleteItem.setTitleSize(18);
            menu.addMenuItem(deleteItem);
        }
    };

    tripListView.setMenuCreator(creator);

    tripListView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
            Trip trip = tripAdapter.getItem(position);
            switch (index) {
                case 0:
                    delete(trip);
                    tripAdapter.notifyDataSetChanged();
                    break;
            }
            return false;
        }
    });
}

我最大的问题是我不太明白我在哪里将孩子添加到已经有父母的父母中。

我所有的源代码都可以在here找到。

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    代替:

    View view = inflater.inflate(R.layout.fragment_car_trips_overview, container, true);
    

    使用:

    View view = inflater.inflate(R.layout.fragment_car_trips_overview, container, false);
    

    注意最后一个参数现在是false。如果你使用true,你刚刚创建的视图会自动添加到容器中(inflate的第二个参数)。对于片段,请始终在 onCreateView(...) 中使用 false

    【讨论】:

      猜你喜欢
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多