3

私は2つのレイアウトを持っています。

プログラムの起動時に、最初のロード(WebView)がうまくいきます。

ユーザーがメニュー項目を選択すると、2 番目のものも (単純なレイアウトで) 正常に読み込まれます。

setContentView(R.layout.simple);
LinearLayout ll = (LinearLayout) findViewById(R.id.simple_layout);

バックグラウンドで何かを処理しながら画像を表示するだけです。処理が完了すると、隠蔽したばかりの WebView に (Handler を介して) 戻ろうとします。

setContentView(R.layout.main);

切り替えは発生しているようですが、webview は空白です。

何故ですか?setContentView()2 番目のレイアウトへの切り替えが正常に機能したのと同じように、1 番目のレイアウトに戻すだけでは十分ではありませんか?

4

2 に答える 2

6

私はこの方法を使用します: メインプログラムで:

private LinearLayout mainview;
private LinearLayout playerview;

onCreate では:

LayoutInflater inflater = LayoutInflater.from(this);
setContentView(R.layout.main);
mainview = (LinearLayout) this.findViewById(R.id.main);
playerview = (LinearLayout) inflater.inflate(R.layout.player, null);

その後、あなたは呼び出すことができます

setContentView(mainview);

setContentView(playerview);

いつでも。必要なのは、レイアウトごとに 1 つずつ、2 つのレイアウト xml ファイルだけです。これは、フラグメントや他の方法よりもはるかに簡単です。

何らかの理由で、最初のメイン ビューを膨らませる必要はなく、他のビューだけを膨らませる必要があります。setContentView() が呼び出されたときにビューを膨張させる必要があるためだと思います。

于 2012-07-23T01:47:57.333 に答える
2

ここでの主な問題は、setContentView() を複数回呼び出すべきではないことです (コメントに記載されているように)。フラグメントは良い考えですが、 2 つのビュー間で変更するだけの場合は、 ViewFlipperを使用することもできます。http://blog.kerul.net/2011/07/viewflipper-examplea-simple-flashcard.htmlからの例

   Button next,previous;
    ViewFlipper vf;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        next = (Button) findViewById(R.id.Button01);
        previous = (Button) findViewById(R.id.Button02);
        next.setOnClickListener(this);
        previous.setOnClickListener(this);
        vf=(ViewFlipper)findViewById(R.id.ViewFlipper01);
    }

    //@Override
    public void onClick(View v) {
        if (v == next) {
            vf.showNext();
        }
        if (v == previous) {
            vf.showPrevious();
        }
    }
}

画面が空白になっているのは、webview を再度初期化する必要があるためです。setContentView() を数回呼び出す場合は、findViewByIds などを再度取得する必要があります。リスト ビューが含まれています。

于 2012-07-23T01:44:00.090 に答える