フラグメントを追加する前に、サブビューを使用してプログラムでフラグメントのリストを動的に作成したいと考えています。ビューのリストを使用して各フラグメントを設定する JSON ファイルがあるため、アプリの起動時に、データの処理中に画像を表示するだけのスプラッシュ スクリーンと呼ばれるアクティビティがあります。以下の簡単な例では、3 つのフラグメントを生成し、それらのサブビューを設定しようとしています (これはスプラッシュ スクリーン アクティビティにあります)。
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と呼ばれるRelativeLayoutがあります
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;
}
これにより、サブビューをフラグメントに追加できます。このテストには、ボタンを押すと、正常に機能する次のフラグメントに移動するボタンが含まれますが、前のフラグメントに移動しようとすると、「指定された子」というエラーが表示されます。すでに親がいます。」
私はこれがこれのためであることを知っています
Button but = new Button(this);
フラグメントではなくスプラッシュ画面のコンテキストを取得していますが、作成前にフラグメントからコンテキストを取得するにはどうすればよいですか?
サブビューを表示する前にフラグメントに追加するためのより良い方法を誰かが提案してくれませんか。
どんな助けでも大歓迎です
01-15 12:25:01.598: E/AndroidRuntime(3443): FATAL EXCEPTION: main 01-15 12: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): android.view.ViewGroup.addView(ViewGroup.java:1828) 01-15 12:25: 01.598: E/AndroidRuntime(3443): android.view.ViewGroup.addView(ViewGroup.java:1808) 01-15 12:25:01.598: E/AndroidRuntime(3443): com.single.DefaultFragment.onCreateView(DefaultFragment) .java:61) 01-15 12:25:01.598: E/AndroidRuntime(3443):