亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android:無法將一個片段替換為另一個

Android:無法將一個片段替換為另一個

慕容708150 2019-12-16 16:12:10
我需要將Fragment其中一個替換為Activity另一個Fragment,以下是的圖層文件Activity:<?xml version="1.0" encoding="utf-8"?><FrameLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:id="@+id/home_layout_container">    <fragment android:name="com.foo.FragA"        android:id="@+id/home_list"        android:layout_width="fill_parent"        android:layout_height="fill_parent" />    </FrameLayout>所以默認情況下有FragA,現在我想在活動中將其替換為FragB,我這樣做了:public void onRegionClicked(Region region) {    RegionInfoFragment rif = RegionInfoFragment.newInstance(region);    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();    ft.replace(R.id.home_list, rif);}但是我有一個例外:>6:24:40.685: ERROR/AndroidRuntime(9194): Uncaught handler: thread main exiting due to uncaught exception05-06 16:24:40.692: ERROR/AndroidRuntime(9194): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.view.ViewGroup.addViewInner(ViewGroup.java:1857)05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.view.ViewGroup.addView(ViewGroup.java:1752)05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.view.ViewGroup.addView(ViewGroup.java:1709)05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.view.ViewGroup.addView(ViewGroup.java:1689)05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40)05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:743)05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:933)05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:578)我能做什么?
查看完整描述

4 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

您不能替換在布局文件中靜態定義的片段。您只能替換通過來動態添加的片段FragmentTransaction。


查看完整回答
反對 回復 2019-12-17
?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

嘗試commit()在ft結束時,需要對commit()您的更改進行通知。


查看完整回答
反對 回復 2019-12-17
?
米脂

TA貢獻1836條經驗 獲得超3個贊

getFragmentManger()

  .beginTransaction

  .replace(R.id.frame,Yourfragment.newInstance(),null)

  .addtobackstack

  .commit();

人們總是說我是一線客,所以這是您的一線客解決方案



查看完整回答
反對 回復 2019-12-17
?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

將一個片段替換為另一個片段,并在后堆棧中保留先前的狀態:


    // Create new fragment and transaction


    Fragment newFragment = new ExampleFragment();

    FragmentTransaction transaction = getFragmentManager().beginTransaction();


    // Replace whatever is in the fragment_container view with this fragment,

    // and add the transaction to the back stack

    transaction.replace(R.id.fragment_container, newFragment);

    transaction.addToBackStack(null);


    // Commit the transaction

    transaction.commit();



查看完整回答
反對 回復 2019-12-17
  • 4 回答
  • 0 關注
  • 535 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號