0

我知道可以为纵向和横向模式设置布局(这不是问题)。说在纵向模式下我想显示 3 个文本视图(实际上我有 3 个不同的图形,每个轴 xyz 一个),而在横向模式下我只想要一个文本视图(在我的情况下,一个图形包含所有 3 个轴),所有视图都得到了他们自己的身份证。

现在在相应的活动中,如何设置 ui 控件?因为在横向模式下只有一个文本视图,而在纵向模式下我有 3 个。所以当我处于纵向模式时,我只能在 textview 1 2 和 3 中写一些东西,但在横向的文本视图中什么也没有,反之亦然。

手动检查 ui 控件是否在这里(不是 null)不能是正确的解决方案,对吧?

例如

说在纵向模式下,我有一个 ID 为“text1”的文本视图,而在横向模式下,我有一个 ID 为“text2”的文本视图。现在在活动的创建方法中,我执行以下操作:

text1 = (TextView) findViewById(R.id.text1);
text2 = (TextView) findViewById(R.id.text2);

text1.setText("some text");
text2.setText("some other text");

我总是会得到一个NullPointerException,因为在任何一种情况下,其中一个文本视图都不存在。可以在使用之前检查该字段是否不为空,但这会引入更多需要处理的逻辑 - 因此它的可维护性较差

4

3 回答 3

1

您可以在两种布局中创建并使用 visibility="gone" 隐藏它们以保持对视图的有效引用

于 2011-09-05T21:39:01.773 回答
1

因为您可能不想浪费资源设置和处理布局中不可见的字段,除非这在您的应用程序中有意义,否则您应该检查null视图,这将使您了解正在处理的方向:

text1 = (TextView) findViewById(R.id.text1);
text2 = (TextView) findViewById(R.id.text2);

if ( text1 != null ) text1.setText("some text");
if ( text2 != null ) text2.setText("some other text");
于 2011-09-05T22:32:22.207 回答
0

也许通过根据您使用的模式使一些文本视图可见/不可见?您可以通过以下方式检测您正在使用的模式:getResources().getConfiguration().orientation

我不知道这是否真的回答了你的问题,但是..

最好的,

于 2011-09-05T21:37:03.823 回答