zoukankan      html  css  js  c++  java
  • 个人练习:更新UI线程

    1.如果是同一个线程(或者是主线程)里,可以直接进行UI内容的更新,如果是两个不同的线程,更新则会报错,可以用Handler+Runnable来进行不同线程的UI更新

    报错代码(报错内容:ERROR/AndroidRuntime(785): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.):

    public class MainActivity extends Activity
    {
    private TextView tvInfo = null;
    private Button btnClick = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tvInfo = (TextView)findViewById(R.id.tv01);
    btnClick = (Button)findViewById(R.id.btnClick);



    btnClick.setOnClickListener(new OnClickListener()
    {

    @Override
    public void onClick(View v)
    {
    new Thread(run).start();
    }
    });
    }
    Runnable run = new Runnable()
    {

    @Override
    public void run()
    {
    tvInfo.setText("kelei");
    }
    };
    }

    正确代码1:因为是同一个线程(主线成,所以能直接更改UI上的内容)

    public class MainActivity extends Activity
    {
    private TextView tvInfo = null;
    private Button btnClick = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tvInfo = (TextView) findViewById(R.id.tv01);
    btnClick = (Button) findViewById(R.id.btnClick);

    btnClick.setOnClickListener(new OnClickListener()
    {

    @Override
    public void onClick(View v)
    {
    tvInfo.setText("kelei");
    }
    });
    }
    }

    正确代码2(使用Handler+Runnable):

    public class MainActivity extends Activity
    {
    private TextView tvInfo = null;
    private Button btnClick = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tvInfo = (TextView) findViewById(R.id.tv01);
    btnClick = (Button) findViewById(R.id.btnClick);

    btnClick.setOnClickListener(new OnClickListener()
    {

    @Override
    public void onClick(View v)
    {
    Handler handler = new Handler();
    handler.post(run);
    }
    });
    }
    Runnable run = new Runnable()
    {

    @Override
    public void run()
    {
    // TODO Auto-generated method stub
    tvInfo.setText("kelei");
    }
    };
    }



  • 相关阅读:
    变量和基本数据类型,深浅拷贝问题
    计算机系统与编程语言分类
    关于计算机硬件的基本知识
    Python学习之路——函数
    Python学习之路——Day06 元组
    day--07
    数据类型——可变不可变类型
    数字类型
    流程控制——while循环
    流程控制——if判断
  • 原文地址:https://www.cnblogs.com/kelei12399/p/2351285.html
Copyright © 2011-2022 走看看