RecyclerView 不一樣的列表
以往,Android開發列表一般用的ListView GridView(這個不懂,自己百度去)etc.
但是,在Google釋出了一個新控制元件:RecyclerView。這是什麼?回收?這樣理解也沒錯,它不管其他,它只負責回收利用,沒有顯示的就回收了不佔資源,要顯示的再拿資料並顯示。
好了不說了。直接說使用吧。
首先,新建一個專案,名字隨便啦
接著,我們先試試xml佈局,開啟 activity_main.xml 輸入
<Recyc
看看IDE有沒有彈出提示選擇RecyclerView,多半是沒有的,我有個專案我沒找到這傢伙的依賴 但是我就是用上了(手動滑稽)
好了,繼續。
沒有的話,我們兩個方式新增依賴
1、 選擇專案(一般開啟都是Android檢視)右鍵找到
最後ok ,好了 我們依賴就完了
2、直接手動開啟檔案輸入依賴
一定要app模組的不要project那個
接著在dependencies方塊裡輸入
implementation ‘com.android.support:recyclerview-v7:27.0.2’
最後sync now。好,匯入成功了
如果報錯,按照提示改就好了,多半是版本問題(就在剛剛我出來的。。。暈)版本一致就ok(支援庫)
接著,開始我們的佈局
activity_main.xml開始寫,直接Recyc然後回車,
恩,得是這個哈
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</android.support.v7.widget.RecyclerView>
好了佈局就完了,接著使用程式碼
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.rv);
//介面卡
List<Integer> datas = new ArrayList<>();
for(int i = 0;i < 50;i++){
datas.add(i);
}
MyAdapter adapter = new MyAdapter(this,datas);
//設定layout管理器(list or grid)
mRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
//設定動畫效果 預設
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//設定分隔符
mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
//設定adapter
mRecyclerView.setAdapter(adapter);
}
}
基本配置就這些,然後我們看看介面卡
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<Integer> mDates;
private LayoutInflater layoutInflater;
private Context mContex;
public MyAdapter(Context context, List<Integer> dates) {
this.mDates = dates;
this.mContex = context;
layoutInflater = LayoutInflater.from(context);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = layoutInflater.inflate(R.layout.item, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
int a = mDatas.get(position);
holder.tv.setText(a+"");
}
@Override
public int getItemCount() {
return mDates.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public MyViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv);
}
}
然後我們看到有一個 R.layout.item 這個就是每一個item的顯示佈局長什麼樣子
item.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:layout_margin="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:text="1" />
</android.support.constraint.ConstraintLayout>
好了,差不多了,我們來執行一下。
emmmm
咦,我們不是設定了分隔線,額。
不急,這裡的是系統自帶的,一般沒什麼用(簡稱:然並卵)
所以我們要自己寫一個,所以免得麻煩,從網上摘一個下來
這裡給一個。。。原著我也不知道。。。
好了我們把那裡重新改一下。
mRecyclerView.addItemDecoration(new DividerDecoration(this,DividerDecoration.VERTICAL_LIST));
執行一下,有線了,但這個是預設的。我們可以自定義一下
然後我們看一下原始碼。
private static final int[] ATTRS = new int[] { android.R.attr.listDivider };
有這樣一句話,說明我們可以自己定義一個
不用改TA的內容,然後我們自己建一個divider_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:centerColor="#002aff"
android:endColor="#ff0000"
android:startColor="#00ff84"
android:type="linear" />
<size android:height="2dp" />
</shape>
最後,在style裡面新增
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!--新增的-->
<item name="android:listDivider">@drawable/divider_bg</item>
</style>
好了,讓我們看看最後的效果
然後RecyclerView還有其他的用法例如類似GridView那種
只需要把佈局管理器改了
mRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
改了
mRecyclerView.setLayoutManager(new GridLayoutManager(this,5,GridLayoutManager.VERTICAL,false));
ok,看一下效果
恩,榮老夫點點頭。
甚是漂亮
當然如果你還要玩出更多花樣也可以用其他的。
然後我還沒寫完,因為你會發現點選事件沒有,他居然沒有點選事件
so,你得自己寫,有兩個方法,看你的咯
這裡給一個大神的(手動嘿嘿)
好了,我自己的網站,宣傳一下
有什麼疑問,請說出來,謝謝。