有很多关于TextView没有更新的帖子,并且有很多关于如何解决问题的建议/建议。
我认为我已经尝试了大部分(如果不是全部的话)并且还没有解决问题。
一般来说,我的代码如下:
private String RefreshUpdateMsg = "Updating";
TextView txtRefresh;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.updateroutesform);
myActivity = this;
txtRefresh = (TextView) findViewById(R.id.txtRefreshing);
Button btnUpdate = (Button) findViewById(R.id.btnUpdate);
btnUpdate.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
// Launch Alert Dialog and Acquire New Data
ConfirmUpdate();
}
});
if (IntegrateData.equals("YES")) {
//txtRefresh = (TextView) findViewById(R.id.txtRefreshing);
txtRefresh.setVisibility(View.VISIBLE);
txtRefresh.setText(RefreshUpdateMsg); // THIS SHOWS FINE
// Launch Handler to Integrate the NewData
mHandler.postDelayed(mLaunchIntegration,1000);
}
}
第一次通过onCreate()时,“IntegrateData”设置为“NO”,因此GUI等待用户单击btnUpdate并启动Alert Dialog。
警告对话框(如果单击是)将完成()此表单并运行另一个表单。
在完成另一种形式的新数据采集(文本文件)后,它将再次启动此表单,但将IntegrateData'标志'设置为“YES”
这将启动Handler以整合数据 到目前为止,一切正常。
现在,在Handler中,除了读取新文件并将其数据写入我的SQLite数据库表之外,我还尝试更新TextView“txtRefresh”以显示慢速数据集成的状态。
在不同的时间(并非所有顺序如下所示),我尝试了以下各项:
// -----------------------------------------
txtRefresh.setText("New Text");
txtRefresh.invalidate(); // DID NOT WORK
// -----------------------------------------
txtRefresh.setText("New Text");
txtRefresh.postInvalidate(); // DID NOT WORK
// -----------------------------------------
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
((TextView) txtRefresh).setText("New Text"); // DID NOT WORK
}
});
// -----------------------------------------
myActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
txtRefresh.setText("New Text"); // DID NOT WORK
}
});
// -----------------------------------------
// -- I even tried launching a new, separate Handler to just update the
// -- TextView, but it too did not work
这些单独的方法都没有奏效 要么我做错了,要么我需要不同的方法。
非常感谢任何建议/意见。
由于
答案 0 :(得分:0)
尝试用此套装替换您的代码。您使用TextView作为String,并且您还重新初始化了文本视图。只要仔细检查你上面已经声明了txtRefresh。
String refreshUpdateMsg = "Updating...";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.updateroutesform);
txtRefresh = (TextView) findViewById(R.id.txtRefreshing);
Button btnUpdate = (Button) findViewById(R.id.btnUpdate);
btnUpdate.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
// Launch Alert Dialog and Acquire New Data
ConfirmUpdate();
}
});
if (IntegrateData.equals("YES")) {
txtRefresh.setVisibility(View.VISIBLE); //removable if you haven't set the visibility to GONE or INVISIBLE in your xml
txtRefresh.setText(refreshUpdateMsg); // THIS SHOWS FINE
// Launch Handler to Integrate the NewData
mHandler.postDelayed(mLaunchIntegration,1000);
}
}