【问题标题】:How to append text on TextView word by word android [duplicate]如何逐字在TextView上附加文本android [重复]
【发布时间】:2020-04-13 23:10:57
【问题描述】:

下面是我的代码,它打印 3 或 4 个字然后停止应用程序。

public class MessageWindow extends AppCompatActivity {

String messageFinal = "abcd abcd1 abcd2 abcd3";
private TextView msgDisplay;

public void startThread()
{
    ExampleThraed et=new ExampleThraed();
    et.start();
}

class ExampleThraed extends Thread{

    @Override
    public void run(){
        for(String i : messageFinal.split(" "))
        {
            msgDisplay.append(i+" ");
            try{
                Thread.sleep(100);
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_message_window);
    String message = " By Jay";
    TextView pwDisplay = (TextView) findViewById(R.id.textView1);
    pwDisplay.setText(message);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
    msgDisplay = (TextView) findViewById(R.id.textView3);
    msgDisplay.setMovementMethod(new ScrollingMovementMethod());
    startThread();
}

}

低于错误:

E/AndroidRuntime: FATAL EXCEPTION: Thread-2
    Process: com.example.onlyforyou, PID: 16056
    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
        at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6855)
        at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1075)
        at android.view.ViewGroup.invalidateChild(ViewGroup.java:5242)
        at android.view.View.invalidateInternal(View.java:13574)
        at android.view.View.invalidate(View.java:13538)
        at android.view.View.invalidate(View.java:13522)
        at android.widget.TextView.updateAfterEdit(TextView.java:8209)
        at android.widget.TextView.handleTextChanged(TextView.java:8234)
        at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:10370)
        at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1208)
        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:578)
        at android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:291)
        at android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:289)
        at android.widget.TextView.append(TextView.java:4045)
        at android.widget.TextView.append(TextView.java:4032)
        at com.example.onlyforyou.MessageWindow$ExampleThraed.run(MessageWindow.java:46)

【问题讨论】:

    标签: java android android-studio


    【解决方案1】:

    这里你是从工作线程更新视图,虽然视图可以通过主线程更新

     msgDisplay.append(i+" ");
    

    而不是这个

    尝试将此发布到 ui 线程,通过主线程更新视图。您可以保留主线程的处理程序并将此更改发布到主线程处理程序。

    【讨论】:

      猜你喜欢
      • 2014-06-17
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 2021-09-03
      • 2016-04-20
      • 2012-02-29
      • 2016-10-31
      • 1970-01-01
      相关资源
      最近更新 更多