更改buttonclick上的TextView文本时遇到的问题

时间:2019-06-10 07:23:10

标签: android

我的应用程序中有一个按钮(一个按钮)和一个textview(文本)。在单击按钮之前,textview文本始终为“开始搜索”。但是在单击按钮之后,将调用一个函数(scanning())。执行该功能需要花费一些时间。因此,我希望在单击按钮之后到获得函数结果之前的时间之间,texview文本为“请稍候”。得到函数结果后,textview文本将更改为“ Found”或“ Not Found”。

但是问题是,它从不显示“请稍候”。单击按钮后,它会显示“开始搜索”,直到获得功能结果为止。

如何在文本视图上显示“请稍候”,直到单击按钮??后从功能获得结果?

        Button button = (Button) findViewById(R.id.search);
        TextView text = (TextView) findViewById(R.id.searchR);
        text.setText("Start Search");
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                text.setText("Please Wait");
                boolean res=scanning();
                if(res==true)
                text.setText("Found");
                else text.setText("Not Found");
            }
        });

XML部分:

<Button
    android:id="@+id/search"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="60dp"
    android:layout_marginLeft="60dp"
    android:layout_marginTop="30dp"
    android:text="Search"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/searchR"
    android:layout_width="0dp"
    android:layout_height="34dp"
    android:layout_marginStart="97dp"
    android:layout_marginLeft="97dp"
    android:layout_marginTop="30dp"
    android:layout_marginEnd="16dp"
    android:layout_marginRight="16dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/search"
    app:layout_constraintTop_toTopOf="parent" />

在扫描部分,我使用UUID搜索了BLE设备。如果找到该设备,则返回true,否则返回false;

3 个答案:

答案 0 :(得分:1)

在将文本更改为“请稍候”之后并在调用let cap = new cv.VideoCapture(video); video.height = video.videoHeight; video.width = video.videoWidth; console.log(height, width); // this outputs 480,640 let src = new cv.Mat(height, width, cv.CV_8UC4); let dst = new cv.Mat(height, width, cv.CV_8UC4); let gray = new cv.Mat(); 之前引入一小段延迟。

scanning()

编辑:根据您的代码,可能需要将变量声明为静态或全局变量,以使其起作用。

答案 1 :(得分:0)

我在您的代码中发现了一些错误。

  1. 您要更改Button的文本,而不是TextView。

        public void onClick(View v) {
    
            text.setText("Please Wait");
            boolean res=scanning();
            if(res==true)
            but1.setText("Found");
            else but1.setText("Not Found");
        }
    

这里

but1.setText

应替换为

text.setText
  1. 您的扫描方法非常快速地返回结果,这就是为什么您不会收到Please Wait文本的原因。

答案 2 :(得分:0)

写外部方法来更改文本, 例如:

        public void onClick(View v)
        {
            changeText("Please Wait");
            boolean res = scanning();
            if (res) // (res == true) is unnecessary, you can use like this
                changeText("Found");
            else changeText("Not Found");
        }

        private void changeText(string s)
        {
            text.setText(s);
        }