文本视图不会根据android中的变量更改值

时间:2015-04-08 11:39:55

标签: android textview

我的textview应根据变量predict更改值,但它保持为零并且不会更改值。有什么解决方案吗?

我的部分代码是:( textView1是我在xml中的T​​extView的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)); 
}
}

4 个答案:

答案 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();
 }