recycleview的初识与应用
源码链接: https://gitee.com/huo_shui_three_thousand/RecycleView.
recycleview应用非常广泛,可以很好的替代ListView,GridView,并且使用起来很灵活多变,这里记录一下和它的第一次打交道——划线和分组
效果如下:
这里是在上一个微信tab页面的基础上,再去做的。所以是Fragment下的Recycleview使用,注意和Acitiviy一般情况下使用的一些不同。
我是先做了上课ppt的基础例子:
例子源码:https://gitee.com/huo_shui_three_thousand/Myrecycleview 对初次理解认识很有帮助
了解了它的一般结构和使用:
- 引入依赖包,直接在前端页面拖动或点击,就自动下载引入了
- 添加布局,在xml文件中添加recycleview,新建页面:item.xml为recycleview里面添加内容
- 初始化数据
- 创建适配器,设置数据源,适配器实例化
重写适配器里的三个方法:
- getItemCount();
- onCeateViewHolder();
- onBindViewHolder
activity下的recycleview和fragment下的代码对比:
Activity
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private List<String> list;
private Context context;
private adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
recyclerView = findViewById(R.id.recycleview);
list = new ArrayList<String>();
for (int i=0;i<9;i++){
list.add("这是第"+i+"个例子!");
}
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
adapter = new adapter(context,list);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(linearLayoutManager);
}
}
Fragment
public class friendFragment extends Fragment {
private RecyclerView recyclerView;
private List<String> list;
private View view;
private adapter adapter;
// private Context context;
public friendFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.tab05, container, false);
initData();
initview();
return view;
}
private void initData(){
list = new ArrayList<String>();
for (int i=0;i<15;i++){
list.add("这是第"+i+"个例子!");
}
}
private void initview(){
recyclerView =(RecyclerView)view.findViewById(R.id.recycleview);
//context=getActivity();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
adapter = new adapter(getActivity(),list);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(linearLayoutManager);
//划线
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL));
}
}
其中,Fragment中获取Activity的Context:
- 获取装载fragment的Activity作为Context
- getActivity()得到Context
核心代码(关于适配器):
划线:
public class adapter extends RecyclerView.Adapter<adapter.myviewholder> {
private List<String>list;
private Context context;
private View inflater;
public adapter(Context context, List<String> list) {
this.context = context;
this.list = list;
}
@Override
public adapter.myviewholder onCreateViewHolder(ViewGroup parent, int viewType) {
inflater = LayoutInflater.from(context).inflate(R.layout.item,parent,false);
myviewholder myviewholder=new myviewholder(inflater);
return myviewholder;
}
@Override
public void onBindViewHolder(adapter.myviewholder holder, int position) {
holder.textView.setText(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
class myviewholder extends RecyclerView.ViewHolder{
TextView textView;
public myviewholder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
}
}
分组:
public class GroupAdapter extends RecyclerView.Adapter<GroupAdapter.GroupViewHolder> {
private static final String TAG = GroupAdapter.class.getSimpleName();
private Context mContext;
private List<GroupDataBean> mList = new ArrayList<>();
public GroupAdapter(Context context) {
mContext = context;
}
public void setGroupDataList(List<GroupDataBean> list) {
mList = list;
notifyDataSetChanged();
}
@NonNull
@Override
public GroupViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.group_item, parent, false);
return new GroupViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull GroupViewHolder holder, int position) {
holder.tvArea.setText(mList.get(position).getArea());
holder.tvTeam.setText(mList.get(position).getTeam());
if (position == 0) {
holder.tvArea.setVisibility(View.VISIBLE);
} else {
if (mList.get(position).getArea().equals(mList.get(position - 1).getArea())) {
holder.tvArea.setVisibility(View.GONE);
} else {
holder.tvArea.setVisibility(View.VISIBLE);
}
}
}
@Override
public int getItemCount() {
return mList == null ? 0 : mList.size();
}
public class GroupViewHolder extends RecyclerView.ViewHolder {
TextView tvArea, tvTeam;
public GroupViewHolder(View itemView) {
super(itemView);
tvArea = itemView.findViewById(R.id.tv_area);
tvTeam = itemView.findViewById(R.id.tv_team);
}
}
}
总之,望在今后的学习的进程中,能够熟练掌握更多的它的用法,去灵活使用它。