我是Android Devloping的初学者,我在Android中遇到了用户界面的问题
我的代码看起来像这样:
public class MainActivity extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv1 = (TextView) findViewById(R.id.textView1);
TextView tv2 = (TextView) findViewById(R.id.textView2);
tv1.setVisibility(View.GONE);
tv2.setVisibility(View.GONE);
String s="abc";
MyAsyncTask BkGroundTask = new MyAsyncTask();
BkGroundTask.execute(s);
try {
s = BkGroundTask.get();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();}
tv1.setVisibility(View.VISIBLE);
tv2.setVisibility(View.VISIBLE);
}
}
但是当AsyncTask运行时,tv1和tv2不会消失。 我该怎么做才能解决这个问题?
答案 0 :(得分:0)
这已经多次讨论了,但我会再次解释你想要什么,因为你想要一个特殊的场景......
您几乎从未想要使用.get()
,因为它是阻止通话。这意味着它将锁定您的UI,直到任务完成。 .execute()
,就像你所拥有的那样,是你想要的。
如果您希望它们在任务运行时消失并在任务完成后再次可见,那么您希望将代码放在onPostExecute()
内,如果它是内部类,如果不是然后你可以使用来自Activity
的{{1}}回调并在回调方法中显示它们。
This answer discusses how to use an interface with your AsyncTask
答案 1 :(得分:0)
asynctask是异步执行的,你假设当你调用execute
这是错误的并且会破坏asynctask的目的时,一切都会暂停。实际上它正在消失,但随后再次出现。它发生得如此之快,以至于你甚至无法注意到它。
如果你想在任务完成时显示textview,你需要在任务的onpostexecute中执行此操作
例如
@Override
public void onPostExecute(Void void){
tv1.setVisibility(View.VISIBLE);
tv2.setVisibility(View.VISIBLE);
}