Android Review---1

Android Review—1

零蚀

  • ListView简介

    • ArrayAdapter简介
      ArrayAdapter用法中,最重要的是getView()函数,此函数内部调用了一个createViewFromResource(……)函数用来创建布局,默认布局也就是一个textview,系统代码如下:

      //系统代码
      /* 
       * @ convertView 用于将之前加载好的布局进行缓存,以便重新使用 
       * @  position 当前加载列表的位置
       */
       private @NonNull View createViewFromResource(@NonNull
        LayoutInflater inflater, int position,@Nullable View convertView, @NonNull ViewGroup parent, int resource) {
           final View view;
           final TextView text;
      
           if (convertView == null) {
              view = inflater.inflate(resource, parent, false);
           } else {
              view = convertView;
          }
          ……
          return view;
      
      • ListView的优化步骤和解释
      @Override
      public View getView(int position, View convertView,ViewGroup
        parent) {
           //储存每个条目的控件信息
           ViewHolder viewHolder; 
           //条目
           View view; 
           //条目数据
           Fruit fruit=new Fruit();
           if(convertView!=null){
               view=convertView;
               //获取保存在viewHolder里面的控件信息
               viewHolder= (ViewHolder) view.getTag();
           }else{
               view= LayoutInflater.from(context)
                       .inflate(R.layout.support_simple_spinner_d
                       opdown_item,
                               parent,false);
               //下面一般开始用view.id来取布局的控件对象
               viewHolder=new ViewHolder();
               viewHolder.img=new ImageView(context);
               viewHolder.tx=new TextView(context);
               //将对象信息保存到view中
               view.setTag(viewHolder);
           } 
           viewHolder.img.setImageResource(fruit.img);
           viewHolder.tx.setText(fruit.tx);
       
           return view;
       }
       /**
        * 用来存储控件信息
       */
           class ViewHolder{
               ImageView img;
               TextView tx;
           }
      

  • RecyclerView简介
    • 引入依赖,实例如下

      public class RecycleAdapterDome extends RecyclerView.Adapter<RecycleAdapterDome.MyViewHolder>{
      private Context context;
      private List<String> list;
      private View view;
      /*
      * 构造方法,传入数据
      */
      public RecycleAdapterDome(Context context, List<String> list){
           this.context = context;
           this.list = list;
      }
      /*
      * 创建每个条目的内容,将条目内容保存进viewHolder中,
      * 类似于将viewHolder内容保存进tag中,然后在onBind中取出
      */
      @Override
      public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         //创建ViewHolder,返回每一项的布局
         //这种创建item布局方式可以根据parent来绘制内部正确大小的图
            view = LayoutInflater.from(context)
                  .inflate(R.layout.item_dome,parent,false);
            MyViewHolder myViewHolder = new MyViewHolder(view);
            return myViewHolder;
      }
      /*
      * 绑定数据or监听。。
      */
      @Override
      public void onBindViewHolder(MyViewHolder holder, int position) {
           //将数据和控件绑定
           holder.textView.setText(list.get(position));
      }
      /*
      * 获取条目总数
      */
      @Override
      public int getItemCount() {
         //返回Item总条数
         return list.size();
      }
      /*
      * 内部类,绑定控件
      */
      class MyViewHolder extends RecyclerView.ViewHolder{
         TextView textView;
         public MyViewHolder(View itemView) {
             super(itemView);
             textView=(TextView)itemView.findViewById(R.id.text_view);
        }
       }
      }
      /* 
      * manager=new LinearLayout()
      * manager.setOrientation(LinearLayout.Horizontal)
      * l=recyclerview.setManager(manager)
      * l.setAdapter(XXX)
      */
      
      

  • Fragment简介

    • 静态添加

      <fragment
      //指定是哪一个类来填充
          android.name="com.xxx.NewFragment"
      
    • 动态添加

           NewFragment fragment = new NewFragment();
           FragmentTransaction transaction =  getSupportFragmentManager().beginTransaction();
           
           //将目标fra添加到指定的控件id内
           transaction.add(R.id.text, new NewFragment());
           //        transaction.replace(R.id.text,fragment);
           //        transaction.remove(fragment);
           //将fra模拟入栈,点击back后,出栈的是fra,而非activity
           @ RED //其参数一般为null,也可以接受一个名字,描述返回栈的状态。
           transaction.addToBackStack(null);
           transaction.commit();
      
  • 生命周期

    • open
      • onAttach(Context context)
      • onCreat(Bundle saveInstance) :它其中也有Bundle 类似Activity可以调用onSaveInstanceState(bundle)来保存数据。
      • onCreatView(inflate):构建Fragment布局的函数
      • onAcitivtyCreated():
      • onStart();
      • onResume();
    • close
      • onPause()
      • onStop ()
      • onDestoryView()
      • onDestory()
      • onDetach()

  • 广播简介(跨进程通信)

    • 广播动态注册案例
     
    //📢广播在注册之后需要解注。
    IntentFilter intentFilter=new IntentFilter();
    //广播的处理事件类
    intentFilter.addAction("android.net.conn.CONNECTIVITY_GHANGE");
    NetworkChangeReceiver receiver=new NetworkChangeReceiver();
    // 动态广播在代码中需要注册,才能使用
    registerReceiver(receiver,intentFilter);
    // 动态广播在代码中需要注销
    unregisterReceiver(receiver);
    /**
     * 获取广播的主要操作类
     */
    class NetworkChangeReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            //获取链接的管理类
             ConnectivityManager manager =(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
             //通过管理类获取网络的信息类
            NetworkInfo net=manager.getActiveNetworkInfo();
            if(net.isConnected()){
                Log.d("👭友情提示", "onReceive:网络连接🔗 ");
            }
         }
    }
    /*
    *或者稍稍改动
    */
    NetworkChangeReceiver receiver=new NetworkChangeReceiver();
    final Intent intent=new Intent("com.example.basejavademo.MainActivity.NetworkChangeReceiver");
    IntentFilter intentFilter=new IntentFilter("com.example.basejavademo.MainActivity.NetworkChangeReceiver");
    registerReceiver(receiver,intentFilter);
    sendBroadcast(intent);
        ……
    /**
    * 获取广播的主要操作类
    */
    class NetworkChangeReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "广播", Toast.LENGTH_SHORT).show();
    
        }
    }
    
    

    优点:设置比较自由,灵活性较大
    缺点:只有在程序启动的情况下才可以进行注册,未启动的只能有静态

    • 广播静态注册案例
    
     <!--静态注册广播-->
        <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
               // 过滤器重的name设置了广播的类型,电源,开关机……
               // 这里也可以定义为发送的广播在为指定名称(类名只是方便区别……
               //android:name="om.example.basejavademo.MyReceiver"/>
               <action
                    android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
            </intent-filter>
        </receiver> 
        // 指定的自定义广播接收类
        public class MyReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
             // TODO: This method is called when the BroadcastReceiver is receiving
             // an Intent broadcast.
             }
             }
            // 广播发送方法
            //将意图指向目标的广播接收者,并发送广播
        ……
        Intent intent=new Intent("com.example.basejavademo.MyReceiver");
        sendBroadcast(intent);
        ……
        
    

    创建广播可以在,file->new->other->broadcast_receiver

    • 有序广播
    
     //广播的注册表里添加过滤时候所要用到的,过滤优先级
     <intent-filter android:priority="100">
     //具体的接收类
      public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 截断广播,优先级低的不接收.
        abortBroadcast();
        }
    }
    //发送有序广播,第二个参数是广播权限设置
    //String naming a permissions that
    //a receiver must hold in order to receive your broadcast.
    //If null, no permission is required
        Intent intent=new Intent("com.example.basejavademo.MyReceiver");
        sendOrderedBroadcast(intent,null);
    
    

    以上为全局广播

    • 本地广播
        LocalBroadcastManager manager=LocalBroadcastManager.getInstance(this);
        Intent intent=new Intent("指定的广播action");
        IntentFilter intentFilter=new IntentFilter("指定广播action");
        manager.registerReceiver(指定的广播,intentFilter);
        manager.sendBroadcast(intent);
        manager.unregisterReceiver(指定的广播);
    

    局部性广播(应用内)

    广播的构建核心=注册广播+发送广播

    网版广播底层原理


  • Git 最基本用法(homebrew & as)

    • sudo apt -get install git -core [安装git]

    • git config (……所有打印信息功能命令列表)

      • git config --global user.name ‘xxx’ 配置用户名xxx
      • git config --global user.name。 查看用户名
      • git config --global user.email ‘xxx’ 配置邮箱
      • git config --global user.email。 查看邮箱
    • git init 创建git仓库(在项目路径下,直接用terminal最简)

    • git add (build.gradle) 添加文件or文件夹

    • git add . 添加当前文件(代码库)下所有的文件

    • git commit -m ‘First commit’ 命令 -m 指提交的信息

    • git status 查看文件修改情况,提示更改的文件名

    • git diff 查看所有文件修改内容。git diff 绝对路径 例如:git diff app路径/workspace/android/temp/BaseJavaDemo/app/src/main/java/com/example/basejavademo/MainActivity.java 。查看单独某个类的修改情况。

    • git checkout 撤销最近的修改。 git checkout app路径/workspace/android/temp/BaseJavaDemo/app/src/main/java/com/example/basejavademo/MainActivity.java 。撤销某个类的修改。(适用于没有add的数据)

    • git checkout branchName 切换分支

    • git reset app路径/workspace/android/temp/BaseJavaDemo/app/src/main/java/com/example/basejavademo/MainActivity.java 。针对某个已经add之后的类进行撤销操作,恢复成未加载之前的情况。

    • git log 打印提交历史记录

    • git branch 查看当前所有的分支

    • git branch BranchName 创建一个名叫BranchName的分支

    • git push origin master提交到远程master分支。

    • git pull origin master从远程master分支上拉代码。

    • git fetch origin master执行这个命令,会从远程master分支拉数据,类似于pull,但是它不像pull不会和任何分支合并,而是保存在一个origin/master 的分支上,只是我们可以通过diff来查看到底远程修改了什么。

    • git diff origin/master 之后用merge将origin/master分支合并到master分支即可。

    • git merge origin/master

    • 忽略文件
      忽略文件在as中指的是.gitignore,忽略文件指在版本空中中需要被忽略的内容,比如:忽略掉测试内容的提交,只需要在.gitignore文件中添加 /src/test 和 ***/src/androidTest***就可以在git commit -m ‘’ 时忽略掉标示的内容。

    • 详细拓展见 Android Git 专题


笔记资料来自书籍《第一行代码》郭霖,无商业目的
🔗 前言
🔗 Android Review 列表
🔗 Android Review—2
🔗 Android Review—3
🔗 Android Review—4
🔗 Android Review—5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零蚀zero eclipse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值