java - Android TextView.setText() 在按钮 onClickListener 中不执行任何操作

标签 java android android-fragments settext

我试图在单击按钮后更改 TextView 的文本。文本将显示秒倒计时,因此 setText() 函数会在循环内多次调用。在整个 onClickTrain 函数完成之前,文本不会更改。

我正在使用 fragment 。

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 线程上 hibernate 。这会使应用程序卡住。重绘需要应用程序将控制权返回给调用单击处理程序的事件循环中的 Looper。因此,如果您 sleep ,您的更改将不会显示。

关于java - Android TextView.setText() 在按钮 onClickListener 中不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45021977/

相关文章:

java - 来自数据库的 Web View 的持续数据轮询

android - 找不到 transform-api.jar (com.android.tools.build :transform-api:2. 0.0-deprecated-use-gradle-api)

android - 当关闭对话框 fragment 时,无法在 onSaveInstanceState 之后执行此操作

android - 在 Xamarin.Android 上旋转屏幕/更改选项卡时如何保存选定的选项卡?

java - 可执行jar看不到图像

java - Intellij静态最终集合检查

android - 转换为 Dalvik 格式失败 : Unable to execute dex: method ID not in [0, 0xffff]:65536 添加 API 23 后

android - 没有互联网连接时,Google API 客户端连接方法会卡住 UI

android - 为什么Android会更改具有相同id的EditTexts的值?

java - 如何在java中使用TCP/IP将相同的数据从服务器发送到所有客户端?