Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用uithread更改TextView值_Android_Textview_Ui Thread - Fatal编程技术网

Android 使用uithread更改TextView值

Android 使用uithread更改TextView值,android,textview,ui-thread,Android,Textview,Ui Thread,我正在尝试更改一些textview值,但当它没有出现在屏幕上时,该值不会更改,或者当它出现在屏幕上时,该值会更改,当向下滚动和向上滚动时,该值会返回到旧值。我尝试了以下两种方法,但均无效: final Timer timer=new Timer(); timer.schedule(new TimerTask() { @Override public void run() { MainActivity.this.runOnUiThread(new Runnable(

我正在尝试更改一些textview值,但当它没有出现在屏幕上时,该值不会更改,或者当它出现在屏幕上时,该值会更改,当向下滚动和向上滚动时,该值会返回到旧值。我尝试了以下两种方法,但均无效:

final Timer timer=new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        MainActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                myTextView.setText("sometext");
                timer.cancel();
            }
        });
    }
}, 5000, 1000);
以及:

试用


您还可以查看并在PostExecute中将文本设置为TextView。

您必须确保在更改TextView的值之前先绘制UI,这可以通过添加布局侦听器来完成

ViewTreeObserver vto = getWindow().getDecorView().getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Overrid
public void onGlobalLayout() {
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        MainActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                myTextView.setText("sometext");
                timer.cancel();
            }
        });
    }
}, 5000, 1000);
}
}

尝试删除timer.cancel,因为它会强制计时器只执行一次。这会占用大量内存,并导致主线程上的工作过多,我的问题是在id生成后更新文本视图。您尝试过我的答案了吗?解决了还是更新了我的答案?你必须将一个问题标记为正确的全局YouTube Listener一直称之为self,而这不是我想要的,我需要一次性更改所有文本视图,即使是未显示的文本视图,因为CPU使用情况!?!?!?!?!?!?您的答案很好,但它会让CPU做太多的工作:只有在绘制布局时才会调用OnGlobalYoutListener,它是如何一次又一次地调用自己的?所以您的意思是,它对CPU来说太难了,所以它对您起作用?
    private void TestThread() {
    Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        public void run() {
                 handler.post(new Runnable(){
                    public void run() {
                       tvTime.setText("SomeText");
                    }
                 });
        }
    }
    };
    new Thread(runnable).start();
}
ViewTreeObserver vto = getWindow().getDecorView().getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Overrid
public void onGlobalLayout() {
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        MainActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                myTextView.setText("sometext");
                timer.cancel();
            }
        });
    }
}, 5000, 1000);
}
}