Android 更新UI的幾種方法

總結一下Android中幾種常用的更新UI的方法:

1.用handler的post方法更新UI
2.在handleMessage()方法中更新UI
3.用runOnUiThread()方法更新UI
4.用view的post方法更新UI


用一個TextView作爲實例,通過依次調用不同的方法來更新TextView的顯示內容。


public class MainActivity extends AppCompatActivity {
    private TextView textView;

    /**
     * 1.用handler的post方法更新UI
     */
    private void handler1(){
        handler.post(new Runnable() {
            @Override
            public void run() {
                textView.setText("textView updates the first time!");
            }
        });
    }

    /**
     * 2.在handleMessage()方法中更新UI
     */
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            textView.setText("textView updates the second time!");
        }
    };
    private void handler2(){
        handler.sendEmptyMessage(1);
    }

    /**
     * 3.用runOnUiThread()方法更新UI
     */
    private void upDateUIOnUiThread(){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                textView.setText("textView updates the third time!");
            }
        });
    }

    /**
     * 4.用view的post方法更新UI
     */
    private void viewUpDateUI(){
        textView.post(new Runnable() {
            @Override
            public void run() {
                textView.setText("textView updates the fourth time!");
            }
        });
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView= (TextView) findViewById(R.id.textView);

        /**
         * 創建子線程,依次調用不同方法更新UI
         */

        new Thread(){
           @Override
           public void run() {
               try {
                   Thread.sleep(3000);
                   handler1();
                   Thread.sleep(3000);
                   handler2();
                   Thread.sleep(3000);
                   upDateUIOnUiThread();
                   Thread.sleep(3000);
                   viewUpDateUI();

               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
           }
       }.start();
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章