在 Android 中,您将如何开发它? (活动和观点问题)
Posted
技术标签:
【中文标题】在 Android 中,您将如何开发它? (活动和观点问题)【英文标题】:In Android, how would you develop this? (activity and views question) 【发布时间】:2011-01-14 01:05:55 【问题描述】:当用户打开应用程序时,会出现一个屏幕,上面有一个按钮,上面写着“登录”。
用户点击按钮,会弹出一个webview让他登录网站。
登录后(应用程序需要以某种方式知道),webview 会消失,然后会弹出用户名列表。 (列表视图?)
当用户点击其中一个用户名时,会弹出用户名个人资料的网页视图。当然,当用户按下“返回”时,它会返回到用户名列表。
有人可以用活动和视图向我解释一下吗?我是否使用两项活动来做到这一点?当用户在它们之间单击时,我是否隐藏 webview 或 listview?
我完成了教程(记事本教程),但我仍然对开发它的最佳方法感到困惑。
谢谢
【问题讨论】:
也许我们可以帮助消除混淆,是关于Views
和Activity
的内容吗?或者什么时候使用它们?
两个都回答比较好? :) 我知道一般的想法,但我很困惑。一个活动中可以有多个视图吗?它们是活动的一部分吗? (像这样的问题)
您可以在Activity
中拥有多个视图,它们是Activity
的一部分。当您创建应用程序时,您将扩展至 Activity
类,该类将您的应用程序放入 Activity
堆栈中,并且在应用程序的生命周期中,您的 Activity
可以切换 View
的启动 Intents
(实际上是子Activity
)
活动和意图之间究竟有什么区别?
Intents
是活动的粘合剂。它们提供了对要执行的操作的描述。
【参考方案1】:
当用户打开应用程序时,会出现一个屏幕,上面有一个按钮,上面写着“登录”。用户点击按钮,会弹出一个 webview 允许他登录网站。登录后(应用需要以某种方式知道),
你可以用两个独立的Activity
类来做到这一点。我会将WebView
放在它自己的Activity
中。这比自己管理许多不同的View
对象要容易。此外,如果您将每个部分放在自己的Activity
中,您将获得不同事物之间的转换。
您可以使用the startActivityForResult()
method 启动登录Activity
,无论登录成功与否都允许它返回。
如果要检测登录,可以使用WebViewClient
监视WebView
中的事件。您使用setWebViewClient()
method 设置WebView
的WebViewClient
。
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
。
要在用户点击返回按钮时返回您的应用程序,您可能需要使用onPause
和onResume
,但我不确定。
这可能不是最好的方法,甚至不是一个好的方法,但它可能有助于消除任何混淆。
编辑:
Activity
绑定到 AndroidManifest.xml 作为应用程序的主要入口点。 View
包含您的 Activity
中的用户交互组件,例如登录按钮、显示用户名、在网络上查看内容 (WebView
) 等。
【讨论】:
谢谢。还有一件事——视图是否被隐藏了?例如...当有人单击 ListView 中的用户名时,Webview 会弹出... ListView 是隐藏还是被销毁? 我相信这取决于如何使用onDestroy
或onPause
和onResume
处理它们,但我不能确定它们的默认行为是什么。对于我编写的应用程序(我从未保存过我所处的状态,例如用户选择的偏好),我总是再次调用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 应用程序开发中? [关闭]