我希望在添加片段之前通過子視圖以編程方式動態創建片段列表。我有一個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(本地方法)
你可以發佈堆棧跟蹤的例外嗎? – Luksprog
發佈堆棧跟蹤。更容易改寫我的問題的方式是,如何在創建子片段之前將子視圖添加到片段中。因爲我想在片段活動加載之前設置存儲在arraylist中的片段列表,所以我可以使用arraylist在它們之間轉換。我找到了一個解決方法,但這意味着將所有變量和方法靜態化,我不想這麼做! – AdamM
你可以像當前那樣發佈'DefaultFragment'的'onCreateView'方法的代碼(並拋出異常)嗎? – Luksprog