Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我应该为一个有多个屏幕的应用程序使用多个活动吗?_Android - Fatal编程技术网

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

Android 我应该为一个有多个屏幕的应用程序使用多个活动吗?,android,Android,我是Android新手,我正在构建一个简单的应用程序。它由一个具有三个屏幕的客户端组成。在第一个屏幕中,提示用户输入Ip以连接到服务器(我使用EditText和按钮)。如果成功建立连接,将从服务器检索一些数据,客户端将在空白屏幕上显示数据(我使用TextView)。这将是第二个屏幕。然后,用户可以向服务器询问有关从服务器检索到的任何数据的详细信息,这将是第三个屏幕(我再次使用TextView) 问题是我不知道最好的方法是什么。我目前有一个活动和一个XML文件,其中包含视图的所有组件(EditTe

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

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

我面临的一个问题是,当我把手机放在水平位置时,我隐藏的组件再次出现。我不知道隐藏视图是否是达到我的目的的理想方法

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

非常感谢您为我构建第一个应用程序提供的任何帮助。

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

代替

setVisibility(View.GONE)
改为

setVisibility(View.INVISIBLE) and try

看起来这件事已经发生了很多次了。当配置更改时,Android会销毁、重新创建和
活动
。屏幕旋转是方向的一部分。为了避免这种情况,活动负责保持状态。为此提供的机制是
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方法中的重复操作拉到了一起。

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

以你的邮件应用程序为例。您的列表活动显示了您所有的邮件,然后当您选择一个时,它将启动显示邮件内容的详细信息活动。每项活动只负责一件事,这使得每项活动更易于编写和维护


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

再次显示组件的问题是,您需要在设备转动时保持活动状态。方向更改将导致活动被销毁并重新创建,因此您需要利用onSaveInstance状态来记住哪些视图可见,哪些不可见,然后在onCreate中再次设置可见性。@323go为什么可见性属性不会自动存储,当许多其他的小部件属性是——如果分配了一个ID?@323go OK,你是对的;可见性不是自动保存的。@323谢谢您的回答。我不需要更多的活动吗?那么,有几个活动的目的是什么?@user2071976,我提供了一个响应,概述了这方面的首选模式。对于这个相对较小的应用程序,您可能只需要一个活动就可以完成,但是您需要维护backbackback(onBackPressed)等,以使其适合Android UI范例。这里最好有多种活动。请记住,您的两个TextView活动可以轻松共享xml。我没有投反对票,但我猜您投了反对票,因为您的答案实际上没有回答海报的问题。在他旋转设备之前,他的可视性没有问题。谢谢,我想使用多个活动,但我在活动中遇到了“传递套接字”的问题。第一个活动应该创建套接字,然后将其传递给其他活动,我只知道如何使用
intent.putExtra(字符串名称,字符串值)
传递字符串,而不是sockety您可以在应用程序对象中创建静态变量,然后第二个活动可以访问它。您只需确保用户返回应用程序后套接字仍然有效,因为应用程序可能已被销毁,系统将恢复您的第二个活动。