在 Android 中,您将如何开发它? (活动和观点问题)

Posted

技术标签:

【中文标题】在 Android 中,您将如何开发它? (活动和观点问题)【英文标题】:In Android, how would you develop this? (activity and views question) 【发布时间】:2011-01-14 01:05:55 【问题描述】:

当用户打开应用程序时,会出现一个屏幕,上面有一个按钮,上面写着“登录”。

用户点击按钮,会弹出一个webview让他登录网站。

登录后(应用程序需要以某种方式知道),webview 会消失,然后会弹出用户名列表。 (列表视图?)

当用户点击其中一个用户名时,会弹出用户名个人资料的网页视图。当然,当用户按下“返回”时,它会返回到用户名列表。

有人可以用活动和视图向我解释一下吗?我是否使用两项活动来做到这一点?当用户在它们之间单击时,我是否隐藏 webview 或 listview?

我完成了教程(记事本教程),但我仍然对开发它的最佳方法感到困惑。

谢谢

【问题讨论】:

也许我们可以帮助消除混淆,是关于ViewsActivity 的内容吗?或者什么时候使用它们? 两个都回答比较好? :) 我知道一般的想法,但我很困惑。一个活动中可以有多个视图吗?它们是活动的一部分吗? (像这样的问题) 您可以在Activity 中拥有多个视图,它们是Activity 的一部分。当您创建应用程序时,您将扩展至 Activity 类,该类将您的应用程序放入 Activity 堆栈中,并且在应用程序的生命周期中,您的 Activity 可以切换 View 的启动 Intents(实际上是子Activity) 活动和意图之间究竟有什么区别? Intents 是活动的粘合剂。它们提供了对要执行的操作的描述。 【参考方案1】:

当用户打开应用程序时,会出现一个屏幕,上面有一个按钮,上面写着“登录”。用户点击按钮,会弹出一个 webview 允许他登录网站。登录后(应用需要以某种方式知道),

你可以用两个独立的Activity 类来做到这一点。我会将WebView 放在它自己的Activity 中。这比自己管理许多不同的View 对象要容易。此外,如果您将每个部分放在自己的Activity 中,您将获得不同事物之间的转换。

您可以使用the startActivityForResult() method 启动登录Activity,无论登录成功与否都允许它返回。

如果要检测登录,可以使用WebViewClient 监视WebView 中的事件。您使用setWebViewClient() method 设置WebViewWebViewClient

webview 会消失,

只需使用Intent 启动下一个Activity 并在您的第一个Activity 上调用the finish() method。如果您这样做,那么如果他们单击返回,则用户将不会返回登录按钮 Activity,因为它不再位于堆栈中。

我不清楚的是网站登录的有效期。您可能需要set the flags on the Activities in your Manifest,以确保用户在离开后必须重新登录,然后再返回您的应用程序。

然后会弹出用户名列表。 (列表视图?)

使用ListActivity。这是一个 Activity,它带有用于显示单个 ListView 的 API。

当用户点击其中一个用户名时,会弹出用户名个人资料的网页视图。当然,当用户按下“返回”时,它会返回到用户名列表。

因此,使用onListItemClick() method in ListActivity 检测触摸并启动包含WebView 的新Activity 以显示配置文件。因为这是在一个新的Activity 中,所以后面的处理是全自动的。

【讨论】:

【参考方案2】:

基本上这一切都可以在一项活动中完成。我可以尝试轻松地演示它是如何完成的。

    当您运行您的应用程序时,会调用Activity (androidManifest.xml)。 View可以调用,main.xml)显示登录按钮 单击按钮后,您将启动 WebView 成功登录,将View 切换到在ListView 上显示用户名的自定义视图(可能是您创建的名为userlist.xml 的预定义XML 文件) 在特定用户名上使用 onClick 将启动与该特定用户名相关的 WebView

要在用户点击返回按钮时返回您的应用程序,您可能需要使用onPauseonResume,但我不确定。

这可能不是最好的方法,甚至不是一个好的方法,但它可能有助于消除任何混淆。

编辑:

Activity 绑定到 AndroidManifest.xml 作为应用程序的主要入口点。 View 包含您的 Activity 中的用户交互组件,例如登录按钮、显示用户名、在网络上查看内容 (WebView) 等。

【讨论】:

谢谢。还有一件事——视图是否被隐藏了?例如...当有人单击 ListView 中的用户名时,Webview 会弹出... ListView 是隐藏还是被销毁? 我相信这取决于如何使用onDestroyonPauseonResume 处理它们,但我不能确定它们的默认行为是什么。对于我编写的应用程序(我从未保存过我所处的状态,例如用户选择的偏好),我总是再次调用View 以确保安全。【参考方案3】:

首先我会考虑一种不同的方法来解决这个问题。

您可以在 Andoid 中创建自己的登录布局并将您的登录数据发送到网站。完成此操作后,您应该创建一个包含所有用户名的 ListView。如果用户选择这些用户名之一,您应该打开一个 WebView。

问题是,您必须检查登录是否成功!基本上你需要做一个 HttpRequest,解析输出并检查它。

如果你想登录的是你的网站,你可以为你的登录写一个小的包装器,它会为你的登录返回真/假。 (返回 xml 或纯文本的 php 包装器)

无论如何,如果您真的想通过 WebView 进行登录,您可以通过以下方式进行检查:

private void initWebView(final WebView mWebView) 
    mWebView.setWebViewClient(new WebViewClient() 
        public boolean shouldOverrideUrlLoading(WebView view, String url) 
            Page = new WebView(YourClass.this);
            Page.getSettings().setjavascriptEnabled(true);
            Page.loadUrl(url);

            if(url.contains("OkDoLogIn.php")) 
                /* Check if login was successful if true start new Activity */
            
            return true;
        
    );

使用 url.contains("OkDoLogIn.php") 您基本上可以检查即将打开的 url。在您的情况下,它将是您的登录按钮的网址或网址的一部分。

尽管如此,您还是需要检查您的登录是否成功!

编辑:查看第一条评论!

【讨论】:

可以使用HttpStatus查看是否返回了SC_OK,表示200状态码,表示登录成功。因为这就是所有需要检查的内容。

以上是关于在 Android 中,您将如何开发它? (活动和观点问题)的主要内容,如果未能解决你的问题,请参考以下文章

您将如何将 ClearCase 集成到我们的 Android 应用程序开发中? [关闭]

如何将字节数组一个活动传递给另一个android [重复]

您将如何使用 Discord.js 创建一个每天运行的活动?

在android中重命名包名

Android开发——UI_片段

Android:如何在某些活动上隐藏 ActionBar