網絡上關于RecyclerView的文章可以說是數不勝數宝当。但都大同小異〉ㄏ簦看著他們簡直腦袋一團亂糊庆揩。
我在這里就說下我的個人理解,菜鳥才能和菜鳥有共同語言,不是嗎订晌?
你要想使用它需要:
- 在主要布局里聲明一個RecyclerView控件犬性。
- 繼承自 RecyclerView.Adapter 的布局管理器。
- 約束內容的布局文件腾仅。
- 加載它乒裆。
第3,4個暫且拋到一邊去推励。你會發(fā)現前2個是不是跟我們最開始學的android四大控件之一的activity很相像鹤耍?
activity是一個布局文件 和 控制這個布局文件的類
RecyclerView是一個布局控件 和 控制(加載)這個控件的類(容器)
這里倒過來說,先從最后一個步驟說起:
加載一個activity通過Intent:
Intent intent = new Intent(this,需要加載的類) //找到需要加載的類
startActivity(intent) //啟動
再來看下RecyclerView如何加載它:
recyclerView = (RecyclerView) findViewById(R.id.recyclerView); //找到要加載的控件
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(SearchActivity.this); //創(chuàng)建一個列表布局
recyclerView.setLayoutManager(layoutManager); //設置布局為上面創(chuàng)建的布局
recyclerView.setAdapter(new MyAdapter(null)); //啟動(加載自己的布局管理器验辞,一般null為傳入的數據)
現在說說第二個稿黄,如何創(chuàng)建一個自己的Adapter:
public class MyAdapter extends RecyclerView.Adapter {
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return null;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 0;
}
}
1.1這是繼承自 RecyclerView.Adapter必須要寫的三個:
- onCreateViewHolder 在這個步驟里一般 是 綁定內容布局文件與點擊
- onBindViewHolder 這里就是 把數據與布局綁定
- getItemCount 這是長度,一般返回你傳入的數據的長度
上面一再說數據跌造,而這個我們傳入的數據從哪兒傳入杆怕?一個構造方法搞定。
List<String> mList;
public SearchSuggestionsAdapter(List<String> mList) {
this.mList = mList;
}
還有一個將 內容布局內的控件賦值:
static class MyHolder extends RecyclerView.ViewHolder {
TextView textView;
public MyHolder(View itemView) {
super(itemView);
textView = itemView.findViewbyId(R.id.textview);
}
}
并把MyHolder指定為 RecyclerView.Adapter的泛型:
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
那必須要寫的三個方法(1.1)需要更改壳贪,你可以直接把那三個刪掉陵珍,再使用AndroidStudio的Alt+Enter自動補全。
以下是最簡單的一種
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> {
List<String> mList;
public MyAdapter(List<String> mList){
this.mList = mList;
}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.textView_item,parent,false);
return new MyHolder(view);
}
@Override
public void onBindViewHolder(MyHolder holder, int position) {
holder.textView.setText(mList.get(position));
}
@Override
public int getItemCount() {
if (!mList.isEmpty())return mList.size();
return 0;
}
static class MyHolder extends RecyclerView.ViewHolder {
TextView textView;
public MyHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
}
}
實在看不懂的話就跟著一個字一個字得敲违施。但是不要復制粘貼互纯。敲個幾百行自然而然的就懂了。