在文件存儲(chǔ)部分,利用RecyclerView和SQLite搭建了一個(gè)讀取本地?cái)?shù)據(jù)庫內(nèi)容將其顯示到列表的demo,這里需要注意的就是數(shù)據(jù)庫的基礎(chǔ)操作和RecyclerView的適配器部分,還需要熟練其流程才能掌握。今天的內(nèi)容是結(jié)合之前做的底部導(dǎo)航欄,在切換fragment的時(shí)候顯示列表,其實(shí)實(shí)現(xiàn)過程和在Activity里面是類似的。
一、流程
還是梳理一下具體的流程,我的流程如下:
- 在fragment的布局文件中加入RecyclerView的控件;
- 寫一個(gè)要顯示的item布局;
- 寫一個(gè)POJO類,即一個(gè)Item類,設(shè)置要顯示的變量和構(gòu)造器,setter and getter;
- 寫一個(gè)工廠類,用于制造item;
- 主要的是適配器的書寫
- 在fragment里面實(shí)例化,設(shè)置一些RecyclerView的屬性
貼上適配器的代碼
public class HomeAdapter extends RecyclerView.Adapter <HomeAdapter.MyHolder>{
Context context;
private List<HomeItem> list;
public HomeAdapter(Context context, List<HomeItem> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from (parent.getContext ()).inflate (R.layout.home_list_item_layout,parent,false);
MyHolder holder = new MyHolder (view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyHolder holder, int position) {
HomeItem item = list.get (position);
Glide.with (context).load (item.getImgUrl ()).into (holder.ivImage);
holder.tvTitle.setText (item.getImgTitle ());
holder.tvAuthor.setText (item.getImgAuthor ());
holder.tvInfo.setText (item.getImgInfo ());
}
@Override
public int getItemCount() {
return list.size ();
}
class MyHolder extends RecyclerView.ViewHolder {
RelativeLayout itemLayout;
ImageView ivImage;
TextView tvTitle;
TextView tvAuthor;
TextView tvInfo;
public MyHolder(View itemView) {
super (itemView);
itemLayout = itemView.findViewById (R.id.home_list_item_layout_rl);
ivImage = itemView.findViewById (R.id.home_list_item_image_iv);
tvTitle = itemView.findViewById (R.id.home_list_item_title_tv);
tvAuthor = itemView.findViewById (R.id.home_list_item_author_tv);
tvInfo = itemView.findViewById (R.id.home_list_item_info_tv);
}
}
}
二、 注意事項(xiàng)
在fragment實(shí)例化的時(shí)候注意fragment的生命周期,要在onCreateView()中進(jìn)行。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_home, container, false);
mRecyclerView = view.findViewById (R.id.home_recycler_view_layout);
homeAdapter = new HomeAdapter (getActivity (),list);
mRecyclerView.setLayoutManager (new LinearLayoutManager (getActivity (),LinearLayoutManager.VERTICAL,false));
mRecyclerView.setItemAnimator (new DefaultItemAnimator ());
mRecyclerView.setAdapter (homeAdapter);
mRecyclerView.addItemDecoration (new DividerItemDecoration (getActivity (),DividerItemDecoration.VERTICAL));
return view;
}
三、 Gson的使用
今天還測(cè)試了一下Gson的使用,解析json數(shù)據(jù)??梢越Y(jié)合item的數(shù)據(jù)用Gson解析后進(jìn)行顯示