2013-03-15 87 views
2

我有以下問題:Android替換片段不會隱藏底層片段

我的應用程序由幾個動態添加的片段組成。有一個片段帶有一個按鈕和一個textedit(稱爲'fragA')。

如果我點擊按鈕,我想用一些文本(稱爲'fragB')顯示不同的片段。我這樣做是用下面的代碼(在Fraga類):

btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
      Fragment howFragment = new HowFragment(); 

      FragmentTransaction transaction = null; 
      transaction = getFragmentManager().beginTransaction(); 
      transaction.replace(R.id.flQuestion, howFragment); 
      transaction.addToBackStack(null); 
      transaction.commit(); 

      } 
     }); 

現在的問題是這樣的:

當我推弗拉加按鈕片段(fragB)被創建並顯示在屏幕上,但當我按下位於按鈕上的位置時,它會創建一個新的片段(fragB)。此外,如果我推fragA位於文本位於它位於fragB打開鍵盤..

它看起來像FragB只是覆蓋fragA而不取代它。

我也想做到這一點時,我Swype輸入到fragB被刪除,弗拉加只是正常顯示下一個片段(狀態時,不按按鈕)

更新#

當試圖添加和刪除這是下面的logcat輸出:

FATAL EXCEPTION: main 
java.lang.IllegalArgumentException: No view found for id 0x7f090015  (com.example.eindwerkappv1:id/flQuestion) for fragment HowFragment{419c93c8 #3 id=0x7f090015} 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:903) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 
at android.os.Handler.handleCallback(Handler.java:605) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4441) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
at dalvik.system.NativeStart.main(Native Method) 

回答

0

那麼,爲什麼你不只是調用.remove()EditText片段和.add()TextViewFramgent上,而不是osing的.replace()

做一些事情是這樣的:

fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.remove(addCommentFragment) 
.add(R.id.containerForFragments, commentFragment, "comment"+ 
String.valueOf(numOfComments)).commit(); 

這爲我工作。

+0

我已經試過,但然後應用程序崩潰,我可能不得不說,我沒有在XML佈局文件defiened片段,我動態地添加它們。 transaction.add(R.id.flQuestion,howFragment).remove((Fragment)btn.getTag())。commit; – 2013-03-16 11:55:40

+0

該應用程序與什麼logcat輸出崩潰?... – 2013-03-16 12:34:34

+0

致命例外:主 java.lang.IllegalArgumentException:未找到id 0x7f090015(com.example.eindwerkappv1:id/flQuestion)的片段HowFragment {419c93c8#3 id = 0x7f090015} – 2013-03-16 12:42:52

1

我猜你的fragA片段是在你的XML佈局中定義的?

按照documentation,這是當你使用<fragment>標籤會發生什麼:

系統直接插入的元素的地方 由片段返回查看。

這就是爲什麼你不能刪除以前的片段,因爲它不存在。 如果您想更改代碼片段,則必須從代碼中添加第一個片段。

您需要使用容器,如FrameLayout,並使用FragmentTransaction.add()將第一個片段添加到此活動的onCreate()中的此容器中。

然後FragmentTransaction.replace()方法應該工作。

+0

沒有在我的XML我只是定義linearlayout所以沒有片段標籤。我動態添加它們,所以不能成爲問題..我使用viewpageradapter來獲取屏幕上的片段 – 2013-03-16 11:57:12