我的视图已经构建完毕,一切正常,除非我去更新显示的文本视图。
我使用windowmanager.addView()方法来扩展视图翻转器。 fliper中的一个视图包含textview。我想更新这个textview,虽然这似乎是不可能的。
public void updateTextView(String inString) {
TextView t = (TextView) findViewById(R.id.status);
t.setText(inString);
Log.d("INCOMING String IS FROM THIS!",
inString + " : " + t.getText());
flippy.setDisplayedChild(1);
}
日志消息显示textview具有正确的值,但实际视图本身仍显示xml中编码的默认字符串。
以下是我尝试过的一些事情。
postInvalidate(); 无效(); 发布一个调用invalidate的新runnable。 WindowManager.updateViewLayouts();
我有点失落,关于如何让这个textview显示我的价值观的任何想法?
答案 0 :(得分:0)
您可以执行以下操作:
WeakReference<ServiceClass> weakServ = new WeakReference<>(this);
volatile Handler uiH;
volatile TextView your_text_view;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
uiH = new Handler();
...
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View mainView = inflater.inflate(R.layout.activity_main, null);
wm.addView(mainView)
your_text_view = mainView.findViewById(R.id.your_text_view_id);
your_text_view.setText("original text");
...
yourUpdateTask();
}
void updateText(text) {
//simulate runOnUiThread of activity to solved the problem
uiH.post(new Runnable() {
@Override
public void run() {
your_text_view.setText(text);
}
});
}
void yourUpdateTask() {
//timer is just an example to reproduce the problem
final Timer t = new Timer();
final TimerTask tt = new TimerTask() {
@Override
public void run() { //has problem to update your_text_view with new string
...
ServiceClass yourServ = weakServ.get();
if (yourServ!= null) {
yourServ.updateText(new_text);
}
}
}
};
t.scheduleAtFixedRate(tt, 0, 1000); //run every 1 second
}