我是Android新手,我正在构建一个简单的应用程序。它由一个有三个屏幕的客户端组成。在第一个屏幕中,提示用户输入Ip以连接到服务器(我使用EditText和按钮)。如果连接成功建立,将从服务器检索一些数据,客户端将在空白屏幕上显示数据(我使用TextView)。这将是第二个屏幕。然后,用户可以向服务器询问有关从服务器检索到的任何数据的详细信息,这将是第三个屏幕(我再次使用TextView)。
问题在于我不知道最好的方法是什么。我目前有一个活动和一个XML文件,其中包含视图的所有组件(EditText,button,TextView)。到目前为止,我一直在使用setVisibility(View.GONE);
隐藏某些组件,具体取决于用户所在的屏幕。(例如,在第一个屏幕中,我必须隐藏两个TextView)。
我面临的一个问题是,当我将手机置于水平位置时,我隐藏的组件会再次出现。我不知道为了我的目的,隐藏观点是否是理想的事情。
我认为也许我应该使用多个活动,不应该吗?
我非常感谢您可以帮助我构建我的第一个应用程序。
答案 0 :(得分:1)
这似乎很快就会出现。 Android会在配置更改时销毁并重新创建Activity
。屏幕旋转是方向的一部分。为了避免这种情况,活动负责保留状态。给出的机制是onCreate
和onSaveInstanceState
。在您的示例中,您可以执行以下操作:
int uiPhase = 1;
@Override
void onCreate( Bundle data ) {
uiPhase = data.getInt( "uiPhase", 1 );
// inflate layout
setPhase( uiPhase );
}
// invoke the following each time your screen changes
void setPhase( int newPhase ) {
uiPhase = newPhase;
switch( uiPhase ) {
case 1: // show UI elements for first screen, hide others
break;
case 2: // show UI elements for second screen, hide others
break;
case 3: // show UI elements for third screen, hide others
break;
}
}
@Override
void onSaveInstanceState( Bundle data ) {
data.put( "uiPhase", uiPhase );
}
我不想让上面的模式太复杂,但设置可见性的好方法如下:
phase1view.setVisibility( uiPhase == 1 ? View.VISIBLE : View.GONE );
phase2view.setVisibility( uiPhase == 2 ? View.VISIBLE : View.GONE );
phase3view.setVisibility( uiPhase == 3 ? View.VISIBLE : View.GONE );
这可以将setPhase
方法中的重复完全拉到一起。
答案 1 :(得分:1)
我肯定会建议将您的应用分成多个活动/片段。根据每个屏幕的逻辑大小,你会很高兴你以后做了,因为每个活动只有一个责任。
例如,查看您的邮件应用程序。您的列表活动显示了您的所有邮件,然后当您选择一个时,它会启动详细活动,向您显示邮件的内容。每个Activity只负责一件事,使每个Activity更容易编写和维护。
它还简化了布局定义,因为每个布局定义仅包含相关部分。
答案 2 :(得分:-1)