• 个人练习:更新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");
    }
    };
    }



  • 相关阅读:
    通过Ollydbg定位私有协议通信明文
    智能硬件设备防伪设计
    python中的一切皆对象
    XPath
    mongodb中帮助信息和命令
    mongodb基础操作
    源码安装mongoDB
    yum安装mysql(指定版)
    域名解析
    python中的函数、生成器的工作原理
  • 原文地址:https://www.cnblogs.com/kelei12399/p/2351285.html
Copyright © 2020-2023  润新知