• 4/17学习总结:handler


    今天主要完成了院校页面的布局文件和逻辑代码。

    目标效果如下:在EditView中输入想要搜索的院校,点击查询按钮,显示分数线,报录比,经验,加入讨论组的详细内容

    遇到的问题:在显示主要内容的TextView时,开始无法显示(已解决)

    明天的目标:制作下拉刷新效果

    下面来进行一下总结:

    一  Handler:

    Handler是Android SDK中处理异步类消息的核心类,其作用是让子线程通过与UI通信来更新UI界面 
    总结起来也可以这样说: 
    1.当应用程序启动时,会初始化一个UI线程 
    2.UI线程中创建了Looper,所以是一个循环工作线程 
    3.创建Looper时,Looper会创建一个MessageQueue 

    4.UI中的Looper会不断从MessageQueue中取出消息

    二  基本原理

    开辟一个线程,当需要进行一些耗时的操作时,线程向主线程发送一个消息(Message),这个消息会进入到一个队列中(MessageQueue),而Looper会取出这些消息,交给主线程处理。

    三 一些常用的方法:

    获取Message对象:

    1.Message messag =new Message();这样的方法需要开辟一片空间,占内存

    2.Message nessage=handler.obtainMessage();从当前线程中取出一个Message,handler是Handler对象

    Message的一些常用属性:

    message.what:是用户定义的消息代码,以便收件人能识别这条消息是关于什么的

    message.obj:如果需要存储object类型,可以使用这个属性

    message.arg1(arg2)如果需要存储一些整型可直接使用这两个属性

    Handler的一些常用方法:

    handler.obtainMessage();获得一个Message

    handler.sendMessage(message):发送一个message

    handleMessage(message):上一个方法传过来的的message交由此方法处理

    三  主要代码

    package com.example.kaoyanpai.ui.home;
    
    import android.annotation.SuppressLint;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Looper;
    import android.os.Message;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    import androidx.annotation.Nullable;
    import androidx.annotation.NonNull;
    import androidx.fragment.app.Fragment;
    import androidx.lifecycle.Observer;
    import androidx.lifecycle.ViewModelProviders;
    
    import com.example.kaoyanpai.DBService;
    import com.example.kaoyanpai.R;
    import com.example.kaoyanpai.school;
    
    import java.util.List;
    
    public class HomeFragment extends Fragment {
    
        private HomeViewModel homeViewModel;
        private Button button;
        private EditText editText;
        private TextView textView;
        @SuppressLint("HandlerLeak")
        private Handler handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                Log.i("789","789");
                switch (msg.what){
                    case 0x11:
                        String s = (String) msg.obj;
                        textView.setText(s);
                        Log.i("message","123");
                        break;
                    case 0x12:
                        String ss = (String) msg.obj;
                        textView.setText(ss);
                        break;
                }
    
            }
        };
        public View onCreateView(@NonNull LayoutInflater inflater,
                                 ViewGroup container, Bundle savedInstanceState) {
            homeViewModel =
                    ViewModelProviders.of(this).get(HomeViewModel.class);
            View root = inflater.inflate(R.layout.fragment_home, container, false);
            final TextView textView = root.findViewById(R.id.text_home);
            homeViewModel.getText().observe(this, new Observer<String>() {
                @Override
                public void onChanged(@Nullable String s) {
                    textView.setText(s);
                }
            });
            onStart(root);
            return root;
    
        }
    
    
        protected void onStart(View v){
              button=(Button)v.findViewById(R.id.button3);
              editText=(EditText)v.findViewById(R.id.schoolname);
              textView=(TextView)v.findViewById(R.id.show);
              button.setOnClickListener(new View.OnClickListener(){
    
                  @Override
                  public void onClick(View v) {
                      //创建一个线程
                      new Thread(new Runnable() {
                          @Override
                          public void run() {
                              Looper.prepare();
                      
                              Message message=handler.obtainMessage();
                              message.what=0x11;
                              message.obj="chenggong";
                              handler.sendMessage(message);
                          }
                      }).start();
                  }
              });
        }
    
    }
  • 相关阅读:
    作业
    js判断数组对象属性是否含有某个值
    js去除对象数组中的空值
    js根据含有对象的数组中某一个属性进行排序
    import re
    1
    pycharm2020.3安装激活教程,pycharm2020激活教程
    Elasticsearch(安装篇):Windows下安装和运行Elasticsearch
    Spring Boot (日志篇):Log4j整合ELK,搭建实时日志平台
    Spring Boot(日志篇):Logback集成ELK,处理日志实例
  • 原文地址:https://www.cnblogs.com/wangzhaojun1670/p/12722091.html
Copyright © 2020-2023  润新知