2013-01-15 59 views
1

我希望在添加片段之前通過子視圖以編程方式動態創建片段列表。我有一個JSON文件,它爲每個片段設置一個視圖列表,因此當我的應用程序啓動時,會有一個名爲啓動畫面的活動,它只是在處理數據時顯示圖像。下面的我試圖生成3個片段簡單的例子,併成立了自己的子視圖(這是在閃屏活動)Android動態添加帶子視圖的片段

for(int i = 0; i < 3; i++) 
     { 
      DefaultFragment frag = new DefaultFragment(); 
      RelativeLayout layout = (RelativeLayout) createUI(frag); 
      frag.setFragLayout(layout); 
     } 


private RelativeLayout createUI(final DefaultFragment frag_p) 
    { 

     RelativeLayout layout = new RelativeLayout(this); 
     RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT); 

     Button but = new Button(this); 
     but.setWidth(100); 
     but.setHeight(100); 
     but.setText("Next"); 

     but.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View arg0) 
      { 
       frag_p.testNextFragment(); 
      } 
     }); 
     layoutParams.setMargins(100, 100, 0, 0); 
     layout.addView((View) but, layoutParams); 

     return layout; 
    } 

然後在該片段中有一個叫fraglayout

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) 
    { 
//took out layout inflator temp, to try using the relativeLayout which was set from the splash screen 
//  View V = inflater.inflate(R.layout.fraglayout, container, false); 


     return fragLayout; 
    } 

這樣的RelativeLayout我將子視圖添加到片段沒關係,這個測試只是包含一個按鈕,當你按下按鈕時,你會看到下一個片段,它可以正常工作,但是當我嘗試去前一個片段時,出現錯誤「指定的孩子已經有了家長」。

我知道這是因爲這個

Button but = new Button(this); 

它越來越開機畫面,而不是片段的背景下,但我怎麼在創建前得到該片段的背景?

任何人都可以向我推薦一個更好的方法,在它們被顯示之前將子視圖添加到片段。

任何幫助將不勝感激

12月1日至15日:25:01.598:E/AndroidRuntime(3443):致命異常:主 12月1日至15日:25:01.598:E/AndroidRuntime( 3443): java.lang.IllegalStateException:指定的子項已具有 父項。您必須先調用子對象的父對象的removeView()。 01-15 12:25:01.598:E/AndroidRuntime(3443):在 android.view.ViewGroup.addViewInner(ViewGroup.java:1976)01-15 12:25:01.598:E/AndroidRuntime(3443):在 android.view.ViewGroup.addView(ViewGroup.java:1871)01-15 12:25:01.598:E/AndroidRuntime(3443):at android.view.ViewGroup.addView(ViewGroup.java:1828)01 -15 12:25:01.598:E/AndroidRuntime(3443):at android.view.ViewGroup.addView(ViewGroup.java:1808)01-15 12:25:01.598:E/AndroidRuntime(3443):at com.single.DefaultFragment.onCreateView(DefaultFragment.java:61)01-15 12:25:01.598:E/AndroidRuntime(3443):at android.support.v4.app.FragmentManagerImpl.moveToS tate(FragmentManager.java:870) 01-15 12:25:01.598:E/AndroidRuntime(3443):at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 01-15 12 :25:01.598:E/AndroidRuntime(3443):at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 01-15 12:25:01.598:E/AndroidRuntime(3443):at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 01-15 12:25:01.598:E/AndroidRuntime(3443):at android.support.v4.app.FragmentManagerImpl $ 1.run (FragmentManager.java:420) 01-15 12:25:01.598:E/AndroidRuntime(3443):at android.os.Handler.handleCallback(Handler.java:587)01-15 12:25:01。 598:E/AndroidRuntime(3443):at android.os.Handler.dispatchMessage(Handler.java:92)01-15 12:25:01.598:E/AndroidRuntime(3443):at android.os.Looper。循環(循環。java:123)01-15 12:25:01.598: E/AndroidRuntime(3443):at android.app.ActivityThread.main(ActivityThread.java:3683)01-15 12:25:01.598:E/AndroidRuntime (3443):at java.lang.reflect.Method.invokeNative(Native Method)01-15 12:25:01.598:E/AndroidRuntime(3443):at java.lang.reflect.Method.invoke(Method。 java:507)01-15 12:25:01.598: E/AndroidRuntime(3443):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839) 01-15 12:25 :01.598:E/AndroidRuntime(3443):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)01-15 12:25:01.598:E/AndroidRuntime(3443):在 dalvik .system.Native Start.main(本地方法)

+0

你可以發佈堆棧跟蹤的例外嗎? – Luksprog

+0

發佈堆棧跟蹤。更容易改寫我的問題的方式是,如何在創建子片段之前將子視圖添加到片段中。因爲我想在片段活動加載之前設置存儲在arraylist中的片段列表,所以我可以使用arraylist在它們之間轉換。我找到了一個解決方法,但這意味着將所有變量和方法靜態化,我不想這麼做! – AdamM

+0

你可以像當前那樣發佈'DefaultFragment'的'onCreateView'方法的代碼(並拋出異常)嗎? – Luksprog

回答

0

找出解決方案,在我的片段中我有一個包含對象列表的ArrayList,每當我單擊按鈕轉到下一個片段或返回按鈕返回時,我調用刪除我的相對佈局的所有視圖,現在它工作正常。