我第一次尝试使用Async对象时出现的问题。
我有一个主要活动,其中一些TextView已经以编程方式创建并添加到LinearLayout。还有一个按钮,当单击它时,实例化AsyncTask对象并在doInBackGround方法中获得结果。应该如何将结果字符串传输到TextViews?
a)通过从onPostExecute方法调用这些TextViews的SetText方法, b)在主要活动中使用意图和onActivityResult方法 c)其他一些方法(线索会很好!)
谢谢!
答案 0 :(得分:1)
使用AsyncTask时,您可以使用doInBackground
方法进行处理,使用onPostExecute
更新任何UI更改。因此,如果您需要使用AsyncTask
,我会选择选项A 。
答案 1 :(得分:1)
我会选择AsyncTask
选项。我猜你已经有了一个,当你点击按钮时获得的结果部分需要时间,所以在doInBackground
的{{1}}方法中设置它是一个很好的设计。
然后,您可以在AsyncTask
的{{1}}方法中调用每个TextView
的{{1}}方法。或者,它更合适,您可以在后台计算期间使用setText(...)
和onPostExecute
方法(请参阅AsyncTask documentation)获取结果时更新每个视图,而不必等待直到最后。
请记住,您只能通过AsyncTask
,publishProgress(...)
和onProgressUpdate(...)
方法拨打setText(...)
,因为(至少从您的解释中看起来这样)视图已在UI线程上创建,因此只能从运行这些方法的同一个线程修改它们。
答案 2 :(得分:0)
将TextViews设为私有并在doInBackground中定义它们,然后你可以在onPostExecute中调用setText方法或者在doInBackground中调用最后一个东西,但我建议使用onPostExecute。