异步任务 OnPostExecute 方法不能更新 TextView

3
我有一个正在运行的AsyncTask。我有一个TextView,我模仿Toast最初产生的消息。
我想在OnPostExecute成功后清除TextView,但它没有这样做。任务完成的Toast很好用。如何在OnPostExecute中将TextView设置为空白?用户仍然在显示TextView的屏幕上。
以下是错误条件的代码:
@Override
protected void onPostExecute(Void result) 
 { FetchingImage=0;
  if(webLoadError>0)
   {
    TextView text = (TextView) findViewById(R.id.textView2);
    String temp=" ";
    text.setText(temp);
    Toast.makeText(getApplicationContext(), "Image not available from the internet.\nDefault or last image loaded.\nTry again later.",Toast.LENGTH_LONG).show();
    }  
  }
2个回答

4
尝试像这样做:

试试做类似这样的操作:

((TextView) findViewById(R.id.textView2)).setText("");

编辑:

尝试在 onCreate 方法之外创建一个变量,如 TextView text;,然后在 onCreate 方法内部添加:text = (TextView) findViewById(R.id.textView2);

然后只需在 onPostExecute 方法内加入 text.setText("");

看看这样是否有效。


那么,我不知道是什么原因导致texview无法清除。我能想到的就是检查您要清除的texview的ID是否正确,您可能会清除另一个texview而不知道。 - 0gravity
这是我在调用异步任务之前放置文本的相同位置。因此,ID 是正确的。我尝试使用 GONE 和 make visible,这似乎可以工作,但似乎是一种笨拙的方法。TextView text =(TextView)findViewById(R.id.textView2); text.setVisibility(View.GONE); TextView iv2 =(TextView)findViewById(R.id.textView2); iv2.setVisibility(View.VISIBLE); - user1445716
那会使文本视图消失,但不会清除它。我认为你不想要这个。 - 0gravity
不,我想要清除文本视图中的文本。但这并没有发生。你建议我调用了错误的方法,但实际上并不是这样。我不想销毁文本视图并重新创建它来清除它。所以我仍在寻找解决方案来清除它。就好像setText没有执行一样。因为如果我可以使用相同的findviewById销毁对象...还在寻找。感谢你的额外帮助。 - user1445716
1
Eclipse需要一个CLEAN项目。在我这样做之后,问题就消失了,两种方法都起作用了。我喜欢你更简洁的指示。谢谢。 - user1445716
它无法工作,因为您无法访问onPostExecute内的text,因为AsyncTask是静态的。 - Marco Castanho

0

我知道这个帖子很旧了,但我认为我找到了解决方案(至少对我有效),也许它可以帮助其他人:

我有一个视图,其中包含3个文本视图,其默认值从AsyncTask的“doInBackground”方法中的Web服务接收值,然后在“onPostExecute”方法中更改它们的文本。问题是,在代码的第一次执行中,只有三个文本视图中的一个显示来自Web服务的新文本(无论如何,这是实现Zxing条形码阅读器从产品中读取条形码并从Web服务器获取价格的简单应用程序),下一次执行(打开应用程序后)会正常更新三个文本视图。

因此,我注意到在第一次执行中更新其值的唯一文本视图具有参数“android:textIsSelectable”= true,而另外两个则为false。更改其他2个文本视图中的此参数为true即可解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接