Android TextView.setText() 在按钮 onClickListener 中什么都不做
Android TextView.setText() does nothing in button onClickListener
我试图在单击按钮后更改 TextView 的文本。文本将显示秒数倒计时,因此 setText()
函数在循环内被调用多次。在整个 onClickTrain
函数完成之前,文本永远不会更改。
我正在使用片段。
Log.d(...) 完美地显示了所有内容,因此我知道该过程没问题。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.fragment_classification, container, false);
assert v != null;
liveView = (TextView)v.findViewById(R.id.textView3);
View trainButton = v.findViewById(R.id.train);
trainButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
onClickTrain(v);
}
});
return v;
}
public void onClickTrain(View v) {
for(int i=0;i<numGestures;i++) {//countdown to train each gesture
for (int countDown = 3; countDown > 0; countDown--) {//count down from 3
Log.d("Hold ", ListElements[i] + " in " + String.valueOf(countDown));
liveView.setText("Hold " + ListElements[i] + " in " + String.valueOf(countDown));
SystemClock.sleep(1000);//wait 1 second
}
fcalc.setTrain(true);
SystemClock.sleep(100);
while(fcalc.getTrain()){
//wait until training data is full
}
}
Log.d("size of train vector: ", String.valueOf(fcalc.samplesClassifier.size()));
fcalc.Train();
fcalc.setClassify(true);
}
知道为什么文本不显示吗?我尝试在几个不同的地方使用处理程序。
欢迎任何意见。谢谢。
不要在 UI 线程上休眠。这会使应用程序冻结。重绘需要应用程序 return 控制事件循环中调用您的点击处理程序的 Looper。所以如果你睡觉,你的更改将不会显示。
您可以使用处理程序来添加延迟。如果您使用 Thread.Sleep(5000)
,它会使 UI 无响应。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//Do something here
}
}, 5000);
我试图在单击按钮后更改 TextView 的文本。文本将显示秒数倒计时,因此 setText()
函数在循环内被调用多次。在整个 onClickTrain
函数完成之前,文本永远不会更改。
我正在使用片段。
Log.d(...) 完美地显示了所有内容,因此我知道该过程没问题。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.fragment_classification, container, false);
assert v != null;
liveView = (TextView)v.findViewById(R.id.textView3);
View trainButton = v.findViewById(R.id.train);
trainButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
onClickTrain(v);
}
});
return v;
}
public void onClickTrain(View v) {
for(int i=0;i<numGestures;i++) {//countdown to train each gesture
for (int countDown = 3; countDown > 0; countDown--) {//count down from 3
Log.d("Hold ", ListElements[i] + " in " + String.valueOf(countDown));
liveView.setText("Hold " + ListElements[i] + " in " + String.valueOf(countDown));
SystemClock.sleep(1000);//wait 1 second
}
fcalc.setTrain(true);
SystemClock.sleep(100);
while(fcalc.getTrain()){
//wait until training data is full
}
}
Log.d("size of train vector: ", String.valueOf(fcalc.samplesClassifier.size()));
fcalc.Train();
fcalc.setClassify(true);
}
知道为什么文本不显示吗?我尝试在几个不同的地方使用处理程序。
欢迎任何意见。谢谢。
不要在 UI 线程上休眠。这会使应用程序冻结。重绘需要应用程序 return 控制事件循环中调用您的点击处理程序的 Looper。所以如果你睡觉,你的更改将不会显示。
您可以使用处理程序来添加延迟。如果您使用 Thread.Sleep(5000)
,它会使 UI 无响应。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//Do something here
}
}, 5000);