在AsyncTask启动时使TextView可见

时间:2013-03-05 20:22:00

标签: android asynchronous textview task show

我希望我的AsyncTask类可以更改TextView的布局中的TextView的可见性,并且会出现致命错误。如果我想获取// Main Activity (MainActivity.java) Context MainContext= getApplicationContext(); new MyAsyncTask((TextView)findViewById(R.id.my_text_view)).execute(); // My Async Task (MyAsyncTask.java) public class MyAsyncTask extends AsyncTask <String, Void, String> { private Context context; private TextView my_text_view; public MyAsyncTask (TextView my_text_view){ this.context = MainActivity.MainContext; this.txt_loading = my_text_view; } @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub my_text_view.setVisibility(View.VISIBLE); // crashes Log.i("Value: ", String.valueOf(this.my_text_view.getText())); // O.K.! return null; } @Override protected void onPostExecute(String result) { } @Override protected void onPreExecute() { } @Override protected void onProgressUpdate(Void... values) { } } 的文本值,它可以正常工作,但在尝试设置可见性时它只会崩溃。

TextView

我怎样才能让它发挥作用?另外,我可以从上下文中获取{{1}}吗?我不想将它作为参数发送给构造函数。

1 个答案:

答案 0 :(得分:4)

崩溃是因为你在后台线程中使用UI进行操作。这是不允许的,你不能这样做。

my_text_view.setVisibility(View.VISIBLE);

用户界面只能从原始/主要/用户界面Thread更新/更改。 AsyncTask提供了一些实际在UI Thread上运行的方法。

这些方法完全用于实现您的目标:执行任何UI更新

如果您想从UI更新AsyncTask,可以使用:

  • onPreExecute()
  • onProgressUpdate()
  • onPostExecute()