0

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

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

我面临的一个问题是,当我将手机放在水平位置时,我隐藏的组件再次出现。我不知道隐藏视图是否适合我的目的。

我想也许我应该使用不止一项活动,不是吗?

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

4

3 回答 3

1

似乎这种情况出现了很多。ActivityAndroid 会在配置更改时销毁并重新创建。屏幕旋转是方向的一部分。为了避免这种情况,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方法中的重复拉到了一起。

于 2013-02-14T14:22:19.957 回答
1

我肯定会建议将您的应用程序拆分为多个活动/片段。取决于每个屏幕的逻辑有多大,你会很高兴你后来这样做了,因为每个活动只有一个责任。

例如,查看您的邮件应用程序。您的 List Activity 向您显示所有邮件,然后当您选择一个时,它会启动 Detail Activity 向您显示邮件的内容。每个 Activity 只负责一件事,这使得每个 Activity 更易于编写和维护。

它还简化了您的布局定义,因为每个定义只包含相关部分。

于 2013-02-14T14:23:30.173 回答
-1

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

使用代替

setVisibility(View.GONE)

改成

setVisibility(View.INVISIBLE) and try
于 2013-02-14T14:04:42.420 回答