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



  • 相关阅读:
    CentOS网络接口配置文件ifcfgeth详解
    python session
    Plateau problem
    Maximum subsequence sum
    回溯法解符号三角形
    切莫开一块地荒一块地
    BackTracking_Fixed sum for array elements
    DP_LCS
    Shortest distance between two arrays
    BSP 面试总结
  • 原文地址:https://www.cnblogs.com/kelei12399/p/2351285.html
Copyright © 2011-2022 走看看