写这些主要是为了加深自己对重要知识点的影响 公开也是为了让大家更好的看到重零开始慢慢学习的路程 so 大家
peace~
RecyclerView学习总结(二)——水平滚动,网格布局
RecyclerView学习总结(三)——瀑布流
先介绍下RecyclerView
从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传统的ListView,更加强大和灵活。RecyclerView的官方定义如下:
A flexible view for providing a limited window into a large data set.å
从定义可以看出,flexible(可扩展性)是RecyclerView的特点。
RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字Recyclerview即回收view也可以看出。
RecyclerView并不会完全替代ListView(这点从ListView没有被标记为@Deprecated可以看出),两者的使用场景不一样。但是RecyclerView的出现会让很多开源项目被废弃,例如横向滚动的ListView, 横向滚动的GridView, 瀑布流控件,因为RecyclerView能够实现所有这些功能。
比如:有一个需求是屏幕竖着的时候的显示形式是ListView,屏幕横着的时候的显示形式是2列的GridView,此时如果用RecyclerView,则通过设置LayoutManager一行代码实现替换。
RecylerView相对于ListView的优点罗列如下:
但是关于Item的点击和长按事件,需要用户自己去实现
这一部分截选于简书里面的大佬 那边讲的也比较详细 不要看我的啦 我只是初学者有很多错误的知识!
作者:Rtia
链接:https://www.jianshu.com/p/4f9591291365
來源:简书
首先先上效果图
1.在build.gradle里面引入包
implementation 'com.android.support:design:26.1.0'//design库
design库里面包括了RecuclerView 所以就直接引入这个
先做准备工作
2.新建一个Activity:
RecycleViewActivity 然后会自动生成一个xml文件 然后在在xml文件里面写入这样代码
让他跳转到不同的RecyckerView里面 后续会写表格还有瀑布流等 我现在只写了list 所以先写一个butten
然后在在activity里面写入一下代码
package lee.example.com.test.recycleview;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import lee.example.com.test.R;
public class RecyclerViewActivity extends AppCompatActivity {
private Button mBtnLinear;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycler_view);
mBtnLinear = findViewById(R.id.btn_linear);
mBtnLinear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RecyclerViewActivity.this,LinearRecyclerViewActivity.class);
startActivity(intent);
}
});
}
}
这其实只是一个跳转而已跳转到LinearRecyclerActivity里面 (这个里面是 用来写list的java代码)
然后在建一个activity用来做
LinearRecyclerActivity 用来放list的java代码 相对应的会生成一个xml文件
在xml文件里面写入一下代码
其实里面就是一个RecyclerView控件
然后再在Activity里面写入一下代码
package lee.example.com.test.recycleview;
import android.graphics.Rect;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;
import lee.example.com.test.R;
public class LinearRecyclerViewActivity extends AppCompatActivity {
private RecyclerView mRvMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linear_recycler_view);
mRvMain = findViewById(R.id.rv_main);
mRvMain.setLayoutManager(new LinearLayoutManager(LinearRecyclerViewActivity.this));
//可以绘制下划线Item的分割线
mRvMain.addItemDecoration(new MyDecoration());
mRvMain.setAdapter( new LinearAdapter(LinearRecyclerViewActivity.this, new LinearAdapter.OnItemClickListener() {
@Override
public void onClick(int pos) {
Toast.makeText(LinearRecyclerViewActivity.this,"点击第"+pos+"行",Toast.LENGTH_SHORT).show();
}
}));
}
//绘制分割线
class MyDecoration extends RecyclerView.ItemDecoration{
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(0,0,0,getResources().getDimensionPixelOffset(R.dimen.dividerHeight));
}
}
}
这个里面的代码有备注 先说下没有备注的吧 现在LayoutManager里面设置LinearLayoutManager 这个就是说要把这个xml做成list的形式
ps 因为这种list没有分割线 说以绘制一条分割线出来 因为没有dimen这个 所以要在values里面新建一个文件叫做dimen.xml
在dimen.xml里面写入大小
1dp
其实这个就是一个线大小为1dp的线
然后要写一个Adapter
然后新建一个Adaper用来做中间的数据桥梁之类的
新建一个LinearAdaper 继承如下图所示的Adaper
在LinearAdaper写入
package lee.example.com.test.recycleview;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
import lee.example.com.test.R;
/***
*Create By Lee On 2019/1/2
**/
public class LinearAdapter extends RecyclerView.Adapter {
private Context mContext;
private OnItemClickListener mListener;
public LinearAdapter(Context context,OnItemClickListener listener) {
this.mContext = context;
this.mListener= listener;
}
@Override
public LinearAdapter.LinearViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.layout_linear_ltem,parent,false));
}
@Override
public void onBindViewHolder(LinearAdapter.LinearViewHolder holder, final int position) {
//设置数据!
holder.textView.setText("hello!!!!!!!!");
//设置点击事件方法
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClick(position);
}
});
}
@Override
public int getItemCount() {
return 30;
}//list数量
//做基础工作。。。
class LinearViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
public LinearViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.tv_title);
}
}
//设计点击事件接口!
public interface OnItemClickListener{
void onClick(int pos);
}
}
先做好基础工作
class LinearViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
public LinearViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.tv_title);
}
}
然后在写一个布局layout_linear_item.xml文件
这个呢是每一个list里面的内容
然后这个list就做完了