学习分享
在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了
很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘
如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。
2021最新上万页的大厂面试真题
七大模块学习资料:如NDK模块开发、Android框架体系架构…
只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。
这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
**第三,**到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/*如何获取到item里的内容???
*
* 1. 在Activity中创建一个内部类*/
/*创建一个内部类,用于获取item_chat.xml中的组件*/
public class MyViewHolder extends RecyclerView.ViewHolder{
TextView textView1;
TextView textView2;
TextView textView3;
ConstraintLayout constraintLayout;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
/*并不是直接使用findViewById,而是通过调用itemView
* 如果直接使用findViewById,默认是在MainActivity中查找*/
textView1 = itemView.findViewById(R.id.textView);
textView2 = itemView.findViewById(R.id.textView2);
textView3 = itemView.findViewById(R.id.textView3);
constraintLayout=itemView.findViewById(R.id.rootView);
}
}
}
[]( )🌺创建Adapter类设置RecyclerView中的内容
=================================================================================================
获取到了item\_chat里布局的内容,我们只需要将其复制n份,设置在RecyclerView组件中就实现了列表组件,我们需要用到Adapter类,`RecyclerView.Adapter<MyViewHolder>`,并且将我们刚刚创建的`MyViewHolder`类作为泛型传入,然后重写`RecyclerView.Adapter<>`里的三个方法,它们的功能分别如下图所示:
![image-20220425225745197](https://img-blog.csdnimg.cn/img_convert/a3593f71fa3b58ddcf273d330d7dfcae.png)
这里扩展学了一点`RecyclerView.Adapter`和`RecyclerView.ViewHolder`的知识
确定布局后,需要实现 `Adapter` 和 `ViewHolder`。这两个类配合使用,共同定义数据的显示方式。`ViewHolder` 是包含列表中各列表项的布局的 `View` 的封装容器。`Adapter` 会根据需要创建 `ViewHolder` 对象,还会为这些视图设置数据。将视图与其数据相关联的过程称为“绑定”。
定义 Adapter 时,需要替换三个关键方法:
* `onCreateViewHolder()`每当 `RecyclerView` 需要创建新的 `ViewHolder` 时,它都会调用此方法。此方法会创建并初始化 `ViewHolder` 及其关联的 `View`,但**不会填充视图的内容**,因为 `ViewHolder` 此时尚未绑定到具体数据。
* \[`onBindViewHolder()`:`RecyclerView` 调用此方法将 `ViewHolder` 与数据相关联。此方法会提取适当的数据,并**使用该数据填充 ViewHolder 的布局**。例如,如果 `RecyclerView` 显示的是一个名称列表,该方法可能会在列表中查找适当的名称,并填充 ViewHolder 的 [`TextView`]( ) widget。
* [`getItemCount()`]( ):RecyclerView 调用此方法来**获取数据集的大小**。例如,在通讯簿应用中,这可能是地址总数。RecyclerView 使用此方法来确定什么时候没有更多的列表项可以显示。
**MyAdapter类中关键代码**
/泛型的使用,负责将布局文件复制n次/
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
/*加载并返回布局文件 java->xml*/
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(MainActivity.this).inflate(R.layout.item_chat,parent,false);
MyViewHolder myViewHolder=new MyViewHolder(view);
return myViewHolder;
}
/*填充,修改布局里的控件内容*/
/*1.可以将数据提前填充到一个数组中
* 2.通过数组的下标获取到值,填充到控件中*/
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
chat chat=chatList.get(position);
holder.textView1.setText(chat.title);
holder.textView2.setText(chat.time);
holder.textView3.setText(chat.content);
}
/*将布局复制的次数,返回值为item显示的数量*/
@Override
public int getItemCount() {
return chatList.size();
}
}
[]( )🌳在MainActivity中添加逻辑代码(java完整代码)
===================================================================================================
public class MainActivity extends AppCompatActivity {
List<chat> chatList=new ArrayList<chat>();
RecyclerView recyclerView;
MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取recyclerView
//这里要通过id获取到activity_main.xml布局文件里的RecyclerView组件
//前面的笔记里没设置,需要去xml文件里给RecyclerView组件添加一个id属性
recyclerView=findViewById(R.id.recyclerView);
//填充一些数据
for(int i=0;i<10;++i){
chat chats=new chat();
chats.title="便签"+i;
chats.time="12:"+(10+i);
chats.content="开心的第"+i+"天";
chatList.add(chats);
}
myAdapter=new MyAdapter();
//填充布局文件
recyclerView.setAdapter(myAdapter);
/*设置布局文件的显示方式*/
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
/*泛型的使用,负责将布局文件复制n次*/
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
/*加载并返回布局文件 java->xml*/
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(MainActivity.this).inflate(R.layout.item_chat,parent,false);
MyViewHolder myViewHolder=new MyViewHolder(view);
return myViewHolder;
}
/*填充,修改布局里的控件内容*/
/*1.可以将数据提前填充到一个数组中
* 2.通过数组的下标获取到值,填充到控件中*/
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
chat chat=chatList.get(position);
holder.textView1.setText(chat.title);
holder.textView2.setText(chat.time);
holder.textView3.setText(chat.content);
}
/*将布局复制的次数,返回值为item显示的数量*/
@Override
public int getItemCount() {
return chatList.size();
}
}
/*如何获取到item里的内容???
*
* 1. 在Activity中创建一个内部类*/
/*创建一个内部类,用于获取item_chat.xml中的组件*/
public class MyViewHolder extends RecyclerView.ViewHolder{
TextView textView1;
TextView textView2;
TextView textView3;
ConstraintLayout constraintLayout;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
/*并不是直接使用findViewById,而是通过调用itemView
* 如果直接使用findViewById,默认是在MainActivity中查找*/
textView1 = itemView.findViewById(R.id.textView);
textView2 = itemView.findViewById(R.id.textView2);
textView3 = itemView.findViewById(R.id.textView3);
constraintLayout=itemView.findViewById(R.id.rootView);
}
}
}
![recyclerView演示1](https://img-blog.csdnimg.cn/img_convert/b3277bd0e7d3c353e18f1b9a25577473.gif)
[]( )🌿给列表组件添加响应
==============================================================================
实现了基本的界面,需要点击进去查看便签内容啊,如何实现RecyclerView中的item的事件监听呢?
创建一个新的Activity,在它的布局中添加一个文本组件以示区分
![image-20220426195351298](https://img-blog.csdnimg.cn/img_convert/378f08253d4bf69943c94c25c5a5a957.png)
回到主Activity中,事件监听在`onBindViewHolder()`中实现
![image-20220426195715322](https://img-blog.csdnimg.cn/img_convert/c0c8400ba9e8b2ee64a42a8144cc6914.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/7ccc3538be57476395506c8a554e453e.gif#pic_center)
### 最后
**针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。**
![image](https://img-blog.csdnimg.cn/img_convert/5c719885fc96dc68134f3386e30a9435.webp?x-oss-process=image/format,png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
,以及系统的进阶学习视频资料。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。**
[外链图片转存中...(img-gqWbfpmn-1715890843568)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**