我的textview应根据变量predict更改值,但它保持为零并且不会更改值。有什么解决方案吗?
我的部分代码是:( textView1是我在xml中的TextView的id)
public class face extends Activity implements CvCameraViewListener2 {
public int predict;
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
predict = model.predict(resizer);
}
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "called onCreate");
super.onCreate(savedInstanceState);
TextView txt=(TextView)findViewById(R.id.textView1);
txt.setText(Integer.toString(predict));
}
}
答案 0 :(得分:1)
我的textview应根据变量predict更改值。但它保持为零并且不会更改值
我猜这是因为你改变了int变量(预测)很多,所以无论何时你改变变量,你都会调用你的TextView.setText(yourString);
.. Oncreate
只在你的活动开始或正在运行时运行创建
答案 1 :(得分:1)
变量动态变化时,应动态设置文本视图。所以,从onCreate()
移动它,在Activity创建时只调用一次。
public class face extends Activity implements CvCameraViewListener2 {
public int predict = 0;
TextView txt;
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
// confirm that model and resizer are as expected and not null.
predict = model.predict(resizer);
if (txt != null)
txt.setText(""+predict);
//returns an object of Mat
}
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "called onCreate");
super.onCreate(savedInstanceState);
// hope you called setContentView(yourLayout);
txt=(TextView)findViewById(R.id.textView1);
if (txt != null)
txt.setText(""+predict);
}
}
答案 2 :(得分:1)
onCameraFrame未在UI线程上运行,因此无法更改在UI线程上创建的视图(例如textview)。简单地将这样的东西放在相机框架上:
if (condition) {
runOnUiThread(new Runnable() {
@Override
public void run() {
txt.setText("whatever");
}
});
}
注意TextView txt = findTextView txt =(TextView)findViewById(R.id.textView1);必须在onCameraFrame外面完成
答案 3 :(得分:0)
每次预测发生变化时,您都应该更新TextView的文本。
private void updateTextView() {
txt.setText(Integer.toString(predict));
}
在为预测分配新值后调用此方法:
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame)
{
predict = model.predict(resizer);
updateTextView();
}