是否可以在将 View 切换到该 Activity 之前在后台加载新 Activity ?
例如,我想要一个被调用并显示启动画面的斜线屏幕 Activity 。显示此初始屏幕时,加载下一个 Activity ,加载完成后(当它的 onCreate() 完成时),初始屏幕 Activity 结束,并显示新 Activity 。
我知道另一种选择是在新 Activity 中显示启动画面,并在删除启动图像之前使用异步任务加载所有数据……但我也坚持使用这种方法。该 Activity 首先必须加载大量数据,然后它必须根据该数据动态添加 GUI 元素。 GUI 完全加载后,我想删除启动画面。问题是我无法从 doInBackground() 访问 UI 线程。如果我无法从 doInBackground 更新 UI,我该如何在闪屏后面创建我的 Activity ?我知道 onProgressUpdate() 可以访问 UI 线程,但我不知道如何实现它。
有什么想法吗?谢谢!
最佳答案
由于您没有代码示例,我不确定您正在加载哪种数据以及您如何根据数据动态配置 UI,但我会尽可能多地回答能够。因此,答案可能听起来有点笼统。
首先,定义 2 个布局 xml 文件 - 一个用于初始屏幕,一个用于“主要” Activity 。 所以你最终会得到/res/layout/splash_screen.xml 和/res/layout/main.xml
在您的 onCreate() 中,加载 splash_screen 布局:
setContentView(R.layout.splash_screen);
在您的异步任务中,您将加载您需要执行的任何数据,并将所有这些数据保存在某种数据结构中。为了示例的缘故,我将使用 String 的 LinkedList。
private class MyTask extends AsyncTask<Uri, Integer, List<String>> {
@Override
protected List<String> doInBackground(Uri... params) {
List<String> myList = new LinkedList<String>();
// load up the list with data you are trying to get
myList.add("foo");
myList.add("bar");
// whatever you return here will be passed in as a parameter to the onPostExecute()
return myList;
}
@Override
protected void onPostExecute(List<String> result) {
setContentView(R.layout.main2);
// set layout elements with data that from the result
TextView myTextView = (TextView) findViewById(R.id.some_label);
myTextView.setText(result.get(0));
// or just call some function you defined in your activity instead
}
}
所以基本上,有 2 个不同的布局文件并使用 splash_screen 布局,并使用异步任务加载数据并将其保存在您定义的某些数据结构中,并使用该数据结构在 onPostExecute() 中加载您的 UI 元素在使用 setContentView() 更改回主布局后。
特别说明: 使用上面的代码,如果旋转屏幕,它将再次显示启动画面并重新加载所有数据。如果你想避免这种情况,你可以使用 onSaveInstanceState() 并在 outBundle 中保存你想要的任何数据,然后在 onCreate 的 savedInstanceState 包中读回该数据并加载 UI 元素。如果您想了解更多关于处理旋转的信息,这将需要一个单独的线程(或者您可以搜索它)。
关于android - 在显示之前在后台加载 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13037287/
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi