0

以下のコードで私が何をしているかを簡単に説明します。ViewStub (Vs) を作成し、それを RelativeLayout (Rl) に追加します。次に、同じ RL に新しい Vs を追加したいので、stub2 を作成して rl に追加します。次に、最初と 2 番目の Vs (rlInf1 、rlInf2) の Rl (inflatet) を参照します。次に、rlInf2 が rlInf1 の下になるように Rl.Layoutparams を設定しますが、それらは重複しています。新しい ViewStub が古い ViewStub の下になるように LayoutParams を設定するにはどうすればよいですか? 何か案は?

(ViewStub は XML ではなく Java コードで追加しました)

//Löschen des Standard-Tv
            TextView tv = (TextView) findViewById(R.id.tvNoContentInfo);
            RelativeLayout rl = (RelativeLayout) findViewById(R.id.Layout_ContentInfo);
            rl.removeView(tv);
            //Erstellen eines ViewStubs
            ViewStub stub1 = new ViewStub(this);
            //zum richtigen Layout hinzufügen
            rl.addView(stub1);
            stub1.setLayoutResource(R.layout.routen_navi_infocontent);
            //Referenz zum eingefügten Layout herstellen
            View inflated = stub1.inflate();
            //Zugriff auf Inhalt des zufor referenzierten Layouts
            TextView myTextView = (TextView) inflated.findViewById(R.id.tvHeaderInfocontent);
            myTextView.setText("hey");
            stub1.setId(View.generateViewId());
            stub1.setInflatedId(stub1.getId());
            RelativeLayout rlInf1 = (RelativeLayout) inflated.findViewById(R.id.Layout_infocontent);

            ViewStub stub2 = new ViewStub(this);
            //zum richtigen Layout hinzufügen
            rl.addView(stub2);
            stub2.setLayoutResource(R.layout.routen_navi_infocontent);
            //Referenz zum eingefügten Layout herstellen
            View inflated2 = stub2.inflate();
            RelativeLayout rlInf2 = (RelativeLayout) inflated2.findViewById(R.id.Layout_infocontent);
            RelativeLayout.LayoutParams p= new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            p.addRule(RelativeLayout.BELOW,rlInf1.getId());
            rlInf2.setLayoutParams(p);
4

1 に答える 1

1

ビューを にインフレートするViewStubと、ViewStubがなくなるため、その id を変更しても意味がありません。膨張したビューで変更する必要があります。だから変える

stub1.setId(View.generateViewId());

inflated.setId(View.generateViewId());

最後の 2 行を次のように変更します。

    p.addRule(RelativeLayout.BELOW,inflated.getId());
    inflated2.setLayoutParams(p);

LayoutParamsまた、ビューから既存のものを取得し、inflated新しいものを作成したくない場合もあります。そうしないと、既存のものをすべて上書きしてしまいます。

ViewStubsところで:と即時のインフレの追加は、実際の流れではなく、単なる何かのテストであると想定する必要がありますよね? :-)

追加: はい、使用せずにレイアウトを追加できますViewStub

    View inflated = LayoutInflater.from(this).inflate(R.layout.routen_navi_infocontent, rl, false);
    inflated.setId(View.generateViewId());
    rl.addView(inflated);

    View inflated2 = LayoutInflater.from(this).inflate(R.layout.routen_navi_infocontent, rl, false);
    RelativeLayout.LayoutParams p= new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
            RelativeLayout.LayoutParams.WRAP_CONTENT);
    p.addRule(RelativeLayout.BELOW,inflated.getId());
    inflated2.setLayoutParams(p);
    rl.addView(inflated2);

    TextView myTextView = (TextView) inflated.findViewById(R.id.tvHeaderInfocontent);
    myTextView.setText("hey");
于 2016-08-11T13:08:37.207 に答える