2013-02-27 151 views
0

我有这样的一段代码...TextView.setText()不工作

class IncomingHandler extends Handler 
{ 
    @Override 
    public void handleMessage(Message message) 
    { 

     String totalReceived = (String) message.obj; 
     Log.i("TAG", "total received: " + totalReceived); 
     totalTextView.setText("" + totalReceived); 

     Log.i("TAG", (Looper.getMainLooper().getThread() == Thread.currentThread()) ? "UI thread" : "NOT UI thread"); 
     //Toast.makeText(MainActivity.this, "message received.", Toast.LENGTH_LONG).show(); 

    }; 
}; 

我跑我的应用程序,它工作得很好,但如果我通过改变设备的方向重新创建活动,例如,文字将不会更新。请注意,我确实收到这些消息,并且它们已成功通过LogCat打印。

另外请注意,在我最后的日志中,我尝试确定我是否在主线程上运行。如果该检查是正确的,我确实在UI线程上运行...

任何想法,我可能做错了什么?

干杯, 亚历

+0

忘了提及当我重新创建活动时,我得到的文本是布局中的默认文本... – 2013-02-27 16:33:48

+0

发布您如何挂钩/从处理程序中分离。 – dymmeh 2013-02-27 16:36:17

+0

原来你是对的。我通过处理程序的方式使差异。当我创建服务时,我正在通过它。现在我将它作为replyTo参数传递给每一次我绑定并且它工作 – 2013-02-28 10:56:20

回答

0

皮棉建议的处理程序应该是静态的,使处理器staic并创建一个weakReference的活动,然后通过活动引用访问TextView的,我认为它应该工作

0

尝试保存实例 添加此

@Override 
protected void onSaveInstanceState(Bundle outState) { 
State s = new State(yourTextView.getText().toString()); 
outState.putSerializable(State.STATE, s); 
super.onSaveInstanceState(outState); 
} 
@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
super.onRestoreInstanceState(savedInstanceState); 
State s = (State) savedInstanceState.getSerializable(State.STATE); 
yourTextView.setText(s.getYourTextViewText()); 
} 
0

您的问题是totalTextView仍然是指向(现已被毁)以前的TextView的活动。

如果class IncomingHandler是一个子类活动的,它应该是一个容易的工作,以确保在onCreate()您确保如果处理程序是不是一个子类的活动与totalTextView = (TextView)findViewById(R.id.__/* something */__);

更新它,好吧,也许它应该是,或者你应该看看更多的Android框架高层次的东西来更新和回调活动(例如装载机或无UI的片段与setRetainInstance(true);

ps .:一些用户将告诉你只要覆盖清单中的configChanged即可覆盖该活动的销毁。虽然它可能在第一时间起作用,但这是一个不好的快速解决方案,这是一个不可取的模式,通常会导致未来更大的问题。

来自:http://developer.android.com/guide/topics/manifest/activity-element.html#config

注:使用这​​个属性应该避免只用作 最后手段。请阅读处理运行时更改以获取更多信息 关于如何正确处理由于配置更改而导致的重新启动。

+0

作为dophh评论我的帖子,重要的是你如何将处理程序传递给服务。我的猜测是我的服务知道一个处理程序,它不再与重新创建的活动有任何关系。 – 2013-02-28 10:57:14