2

私は現在 を持っており、AppCompatActivity設定したメニュー ボタンの 1 つを使用してそのレイアウトを切り替えられるようにしたいと考えています。

現在 を使用してそれを行うことができますがsetContentView、元のView表示に戻すには、現在表示されているものを知る必要があります。

表示されているレイアウト ファイルの現在の ID を取得するにはどうすればよいですか?

これは私が現在持っているものです。ロジックは問題ありませんが、コードは機能していないようです:

View currentLayout = findViewById(android.R.id.content);
int currentLayoutID = currentLayout.getId();
if (currentLayoutID == R.layout.two) {
    setContentView(R.layout.one);
} else if (currentLayoutID == R.layout.one) {
    setContentView(R.layout.two);
}
4

4 に答える 4

0
if (currentLayoutID == R.layout.two) {
    setContentView(R.layout.one);
} else if (currentLayoutID == R.layout.one) {
    setContentView(R.layout.two);
}

と を比較しidていR.layoutます。これらは、Rファイル内の 2 つの異なるエントリです。ビューに与えた実際の ID を比較する必要があります。通常、xml ファイルで設定します。例えばR.id.layout1

于 2015-12-14T12:46:53.763 に答える
0

ビューの ID をレイアウト名と比較します。

int currentLayoutID = currentLayout.getId();
if (currentLayoutID == R.layout.two) {

現在選択されているレイアウトを格納する単純なクラス属性を導入します。

private static final int CUR_LAYOUT_ONE = 1;
private static final int CUR_LAYOUT_TWO = 2;
private int currentLayoutID;

// ....

if (currentLayoutID == CUR_LAYOUT_TWO) {
    setContentView(R.layout.one);
    currentLayoutID = CUR_LAYOUT_ONE;
} else if (currentLayoutID == R.layout.one) {
    setContentView(R.layout.two);
    currentLayoutID = CUR_LAYOUT_TWO;
}

追加の onSaveInstanceState() 動作が必要になる場合があります。ユースケースによって異なります。

于 2015-12-14T12:45:56.270 に答える