onCreate之外的TextView.setText不起作用

时间:2014-05-24 18:07:28

标签: android textview

我正在编写一个Android应用程序,我想要修改文本视图。当我在onCreate()方法中对其进行编辑时,它可以正常工作,但我想在用户点击屏幕时对其进行修改。 现在我知道单击屏幕的功能正常,但文本没有被修改。

onCreate()方法中(工作正常):

    main = (TextView) findViewById(R.id.textView1_hidden_buttons);
    main.append(" " + newString);

点按屏幕监听器:

class MyGestureListener extends GestureDetector.SimpleOnGestureListener {

    // Clicking on the screen increases counter taps
    @Override
    public boolean onDown(MotionEvent event) {
        synchronized (this) {
            if (busy)
                return true;
            busy = true;
        }

        main = (TextView) findViewById(R.id.textView1_hidden_buttons);
        main.setText("Waiting for other players");

        try {
            JSONObject json = new JSONObject();
            json.put("client", "ready");

            ConnectionHandler.send(json.toString());

            String serverResponse = ConnectionHandler.receive();

            Intent intent;
            intent = new Intent(MainActivity.this,
                    OrderedButtonsActivity.class);
...

该应用正在等待ConnectionHandler.receive()。 在调用修改文本后,我为应用程序调用{​​{1}}方法,并在一段时间后调用另一个活动。一会儿(半秒左右),我可以看到修改过的文字。 为什么会发生这种情况,如何修复它以便在单击屏幕后修改文本?

1 个答案:

答案 0 :(得分:3)

我在这里看到了几个问题:

1)您试图在不findViewById() extends的班级(或任何有Activity的班级中使用findViewById()

2)从您的问题看来,您导致UI Thread进入睡眠状态。请不要这样做。冻结用户界面Thread是一种糟糕的用户体验。

,UI Thread每隔一毫秒就会死掉独角兽和小猫。

如果您在onCreate()内执行此操作,原因是因为Activity有一个findViewById()