2011-07-20 44 views
3

我仍然在寻找最佳解决方案如何使用菜单和工具栏的布局,并在android中充气或启动活动。我的问题可能听起来很混乱,但我试图用一个例子来解释它。最佳实践活动 - 在Android的切换和视图更改

比方说IM程序的Android应用程序(惊喜..我真的做)

我的应用程序可以做如下:

  1. 用户可以登录[3]或注册[2]。如果他登录,一个新的活动开始,他的仪表板将显示。如果他注册:开始注册过程的活动。
  2. 注册过程:用户输入他想要的用户名和密码,并按下按钮接受。他的数据将被验证,如果有效的话,一个新的活动开始,他可以选择他的设置。后台工作和数据可以传递给新的活动。最后的注册窗口数据将被保存并启动仪表板。开始新的活动很有趣!
  3. 现在,它变得复杂。 Dasboard有一个'actionbar'(顶部)和一个'toolbar'(底部,如标签)。因此,应该在视口的中间部分(从现在称为主视图)中查看所有内容。没有更多的活动切换:(,目前每个tabclick删除主视图的所有视图,并添加其新视图。看起来很棒,可以动画,像一个魅力工作,除了:其目前不动态。

所以...我不知道如何解决它的最好方法,例如:我从web服务获取数据,创建一个列表视图,它扩展了listactivity。这个活动我无法启动,但这个数据需要我要怎么做才是最好的方法? 效率高吗?

我正在练习,这实际上是我想要开始的第一次小型讨论,所以......战斗! )

更新: 我见过一种有趣的方式来开始活动并获得结果。 Launching activity through intents 。活动开始后可以插入新的/更新的视图吗?然后我会在单独的活动中生成我的结果。更新视图。返回到“仪表板”并加载刚刚更新的视图。可能?还是效率低下?我怎样才能从另一个活动中更新视图?有这么多,我需要学习:/

UPDATE2: 已经做了一个应用程序的一个很好的例子:Google+的 太糟糕了,我没有自己的源代码;)

UPDATE3: 什么是最好的?

  • 加载一个新的活动,禁用动画和设置选择工具箱选项卡+ 禁用后退按钮的功能
  • startActionForResults,取结果,并更新当前视图(还是真的不知道怎么这将是可能的)
  • viewFlipper onflip改变+更新翻转视图中的数据。

我仍然不知道任何有效的解决方案。或者我错过了一些重要的东西?我刚刚完成我的ListActivity从我的web服务中获取数据。但它仍然在单独的活动中运行。我现在如何将它实现到我的“主视图”中?当然...我可以设置一个列表我的自定义适配器。但是,当我创建列表活动时,正在更新并从服务器获取数据。

恐怕这可能是唯一的答案我会得到:Embed external Intent in main Activity

UPDATE4:我想的东西。 基于尼尼诺的答案(谢谢!)我尝试以下方法:

  1. 开始Dashboardactivity并创建一个ViewFlipper。
  2. 每个Toolbarclick代表某个ViewFlipper页面。
  3. 每页都有一个Listadapter实现并显示不同的结果(不同的webservice查询)。 (ListView,GridView,带profileimage,不带profileimage)
  4. 在Toolbarclick上启动AsyncTask或Service并通知当前页面列表数据已更改。 (当然IF数据已经改变)。切换到被点击的页面。
  5. 实现updatefeature。滚动到列表底部=获取更多数据并添加它。 5分钟后自动更新其他列表。或点击更新按钮时更新列表。

到目前为止的PRO:整个活动的后退按钮独立。页面翻转动画可能。列表异步更新并仍可能切换到另一个列表。

CONs: ...有人有吗?那么这种方法的效率呢? ViewFlipper是否携带所有的信息,以使性能下降或viewflipper回收视图(如ListView)?

UPDATE5: 如果我有一些时间,我会让这里的一切更多的阅读和讨论。不要因为阅读我的垃圾而生我的气;)

回答

1

根据我的理解,您希望启动应用程序,从互联网获取一些数据并在主屏幕上显示此数据后。

我没有看到需要的第二个活动的,因为从你的解释取数据,你想用它仅仅获取数据,所以最好的办法是:

  1. 创建一个活动(您的仪表板)
  2. 在后台启动一个AsyncTask或服务来获取数据。
  3. 当提取结束时,通知它结束的活动。
  4. 更改仪表板以显示列表(如果您想要某些动画,则可以使用ViewSwitcher,或者仅创建一个布局,使列表不可见,然后更改为可见)。

ps:你可以在ListActivity外部使用ListView,只需创建一个ListAdapter来创建ListView项目并将其添加为ListView的适配器。