Android

高级控件:
    有限窗体内 展示大量数据的控件
    常见:
      ListView:最常用
      GridView 多行多列
      Spinner
      AutoComponentTextView


    用法:
      1:创建一个高级控件 <ListView>
      2:数据源   List  []
      3:适配器   展示数据

        ArrayAdapter<String>  一行文字

ListView:

代码:

Android

Java代码:

Android

高级控件
  1:ListView
  2:GridView
  3:Spinner
  4:AutoComponentTextView
  5:RecyclerView


  1:初始化控件
  2:数据源  List<>  []
  3:适配器
     ArrayAdapter   1:context XXX.this,布局(自己R.layout.xxx/自带android.R.layout.xxx),数据);
     SimpleAdapter  (1:上下文,数据源List<? extends Map<String,Object>>,布局R.layout.xxx,String[] int[])

线程 后台 请求数据
  1:网络权限
  2:开启一个子线程
    new Thread(new Runnable{
        @Override
        run(){
            //耗时操作
            1:URL url = new URL("http://xxx:8080/")
            2:InputStream inputStream = url.openStream();
            //文字 字符流   图片 音频视频  字节流
            3:inputStream--->字符流


            通信主线程
            runonUiThread(){
                run(){
                    .setText
                    .setAdapter
                    .setImageResurce
                    //弹框
                    //吐司
                }
            }
        }
    })


  1:地址
  servlet-mapping
    servlet名字
    /MyServlet
  ip:8080/项目名字/MyServlet?name=zhangsan&pwd=2344


  2:doPost  doGet doPost()
    get:  ?name=123&pwd=124
    post  隐藏
  3:字符编码  中文乱码
    utf-8  gbk  ?
  4:手机测试
    同一个局域网




  数据格式: json
   xml  <map>fdsadfodsaj<map>
   text
   html <font color="green">登陆成功</font>   html
  json
   {"name":"value"}
   ["","",""]


   解析数据


   JsonObject:
   GSON 解析数据


   1:拿到数据  //R.xxx.xxx
     assets:流


 总结:
   1:网络请求
     URL url
     .openStream()

     流
   2:创建assets:
     数据  图片
     InputStream  -->BufferReader


     Json:
     解析:
       {} JsonObject  []JsonArray  JsonArray fori


     实体类:
       ArrayAdapter ×  List<String>
       SimpleAdapter × List<Map>


       BaseAdapter
         List<Object>


         4个
         1:getCount():数量
         2:getItem() :条目
         3:getItemId :位置
         4:getView() :视图
           ①找到布局 布局转换器  LayoutInftener.from().inflate(R.layout.xxx) -->View
           ②View.findviewById
           ③赋值
           ④返回View

 BaseAdapter
    1:类 继承 BaseAdapter
      4个重写方法
      getView
       1:布局 转化成View
       2:View.findviewById()
       3:赋值
       4:返回View
  条目每一个控件的点击事件
    Adapter中设置点击事件
  自定义弹框
    View =  R.layout.xxx


    new AlertDialog.Builder(Context ).
        .setView(View)
        //.setTitle().setMessage()
        show();


   头布局 尾布局


     1:ListView mListView.addHeaderView(View)  .addFooterView(View)




   BaseAdapter
     4个方法
     getView()


   ListView
   GridView:
     多个条目
   Spinner
   AutoCompleteTextView
   Gallery:画廊
   RecyclerView


   1:初始化控件
   2:找到数据源
   3:适配器

传值:序列化:可存储 可传递的对象
  BaseAdapter  优化
    1:class ViewHolder {
        //缓冲池
        //控件  TextView ImageView ...
    }


    2:getView方法中 判断convertView==null
      初始化
             1:new ViewHolder
             2:找到布局 布局转换器 布局R.layout.xxx  --->View
             3:.控件 = convertView.findviewById()
             convertView.setTag(holder)
      else:  holder = (ViewHolder)convertView.getTag()


      赋值...
      点击事件
      返回convertView
  高级控件 : 有限窗体展示大量数据的控件
      View
      GridView 网格
      Spinner  下拉
      AutoCompleteTextView  搜索提示
      Gallery:
      RecyclerView:


  Activity的生命周期:
      刚进入:
      onCreate()
      onStart()
      onResume()
      运行起来 running
      onPause()
      onStop()
      onDestroy() :


1:点击跳转的时候
2:返回的时候