0

エラーが発生しました:

java.lang.IllegalStateException: The specified child already has a parent. You must 
call removeView() on the child's parent first.

送信ボタンをクリックしたときに相対的なレイアウトを作成したい。

RelativeLayout rl = (RelativeLayout) findViewById(R.id.parentLayout);                                        
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
//layoutParams.setMargins(0, 0, 25, 0);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.WRAP_CONTENT,
    RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
TextView tv= new TextView(ChatWithFriend.this);
tv.setId(layId);
tv.setText("data");
tv.setLayoutParams(lp);
rl.addView(tv);
setContentView(rl, layoutParams);

私のコードに何か問題がありますか?

4

3 に答える 3

0

ルート レイアウトは相対レイアウトです。テキストビューを相対レイアウトに追加します。最初にレイアウトのコンテンツをアクティビティに設定してから、相対的なレイアウトを初期化する必要があります。次に、ビューを相対レイアウトに追加できます。

注: アクティビティに設定されている現在のビュー階層の ViewById を見つけることができます。したがって、最初にレイアウトをアクティビティに設定してから、相対的なレイアウトを初期化する必要があります

以下を試してください

setContentView(R.layout.mylayout);
RelativeLayout rl = (RelativeLayout) findViewById(R.id.parentView);                                        
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
//layoutParams.setMargins(0, 0, 25, 0);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT,
        RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
TextView tv= new TextView(ChatWithFriend.this);
tv.setId(layId));
tv.setText("data");
tv.setLayoutParams(lp);
rl.addView(tv,layoutParams);

または、 Raghav Sood と同じビューで提案されているように、relativelayout を作成できます。

于 2013-06-11T05:45:32.557 に答える
0

次のコードを試してください

setContentView(R.layout.your_xml);
RelativeLayout rl = (RelativeLayout) findViewById(R.id.parentLayout);                                        
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
TextView tv= new TextView(ChatWithFriend.this);
tv.setId(layId);
tv.setText("data");
tv.setLayoutParams(lp);
rl.addView(tv,lp);
于 2013-06-11T05:46:14.310 に答える
0

置き換えてみてください:

RelativeLayout rl = (RelativeLayout) findViewById(R.id.parentLayout); 

と:

RelativeLayout rl = new RelativeLayout(this);

既存のコードは既存の RelativeLayout を使用しますが、これは新しいものを作成します。既存のものを使用する場合は、removeAllViews()最初に呼び出して空にする必要があります。

于 2013-06-11T05:37:25.283 に答える