我应该为具有多个屏幕的应用程序使用多个活动吗?

时间:2013-02-14 14:01:19

标签: android

我是Android新手,我正在构建一个简单的应用程序。它由一个有三个屏幕的客户端组成。在第一个屏幕中,提示用户输入Ip以连接到服务器(我使用EditText和按钮)。如果连接成功建立,将从服务器检索一些数据,客户端将在空白屏幕上显示数据(我使用TextView)。这将是第二个屏幕。然后,用户可以向服务器询问有关从服务器检索到的任何数据的详细信息,这将是第三个屏幕(我再次使用TextView)。

问题在于我不知道最好的方法是什么。我目前有一个活动和一个XML文件,其中包含视图的所有组件(EditText,button,TextView)。到目前为止,我一直在使用setVisibility(View.GONE);隐藏某些组件,具体取决于用户所在的屏幕。(例如,在第一个屏幕中,我必须隐藏两个TextView)。

我面临的一个问题是,当我将手机置于水平位置时,我隐藏的组件会再次出现。我不知道为了我的目的,隐藏观点是否是理想的事情。

我认为也许我应该使用多个活动,不应该吗?

我非常感谢您可以帮助我构建我的第一个应用程序。

3 个答案:

答案 0 :(得分:1)

这似乎很快就会出现。 Android会在配置更改时销毁并重新创建Activity。屏幕旋转是方向的一部分。为了避免这种情况,活动负责保留状态。给出的机制是onCreateonSaveInstanceState。在您的示例中,您可以执行以下操作:

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)

将按钮可见性设置为GONE(按钮将被完全“移除” - 按钮空间将可用于其他小部件)或INVISIBLE (按钮将变为“透明” - 其空间将为不适用于其他小部件):

代替

使用
setVisibility(View.GONE)

更改为

setVisibility(View.INVISIBLE) and try