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()
- open
-
广播简介(跨进程通信)
- 广播动态注册案例
//📢广播在注册之后需要解注。 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