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");
    }
    };
    }



  • 相关阅读:
    【解压缩命令】 -费元星
    【虚拟机取得该虚拟机的所有权失败】--费元星
    solr 常见的问题整理 -费元星
    oracle 建立一个视图,然后授权其他用户访问
    虚拟机安装win7 64位-完美解决-费元星
    solr 学习
    CentOS安装JDK1.7
    Nginx+Tomcat多站点访问默认主页问题-狒狒完美解决-Q9715234
    pip 安装时提示uvloop/loop.c:20:10: fatal error: Python.h解决
    MySQL锁总结
  • 原文地址:https://www.cnblogs.com/kelei12399/p/2351285.html
Copyright © 2011-2022 走看看