2

我目前有一个AppCompatActivity并且我希望能够使用我设置的菜单按钮之一来切换它的布局。

我目前使用 可以做到这一点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

1

您可以使用findViewById来查找仅存在于当前视图中的特定视图。如果findViewById不返回 null,则表示您正在查看该特定布局。

于 2015-12-14T12:41:42.020 回答
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 回答
0
if (currentLayoutID == R.layout.two) {
    setContentView(R.layout.one);
} else if (currentLayoutID == R.layout.one) {
    setContentView(R.layout.two);
}

您正在将 与 进行id比较R.layout。这是文件中的两个不同条目R。您需要比较您给出的观点的实际 ID。通常您将它们设置在 xml 文件中。例如R.id.layout1

于 2015-12-14T12:46:53.763 回答
0

也许您应该考虑使用 ViewSwitcher。这会比 setContentView 快很多

http://developer.android.com/reference/android/widget/ViewSwitcher.html

您只需在 xml 中将 ViewSwitcher 定义为视图的父级(您只能在 2 个视图之间切换),如下所示:

<ViewSwitcher 
android:id="@+id/viewSwitcher"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

并且您以编程方式在这样的视图之间切换:

switcher.setDisplayedChild(1); 
于 2015-12-14T16:44:31.953 回答