- 一個實體類RectclerItem
public class RecyclerItem {
private String title;
private String content;
public RecyclerItem(String title, String content){
this.title = title;
this.content = content;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
- 一個基類BaseRecyclerViewActivity
public abstract class BaseRecyclerViewActivity extends BaseActivity
implements SwipeRefreshLayout.OnRefreshListener {
protected TextView titleNameTv;
protected SwipeRefreshLayout swipeRefreshLayout;
protected RecyclerView recyclerView;
@Override
protected int getLayoutResId() {
return R.layout.activity_recyclerview;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
titleNameTv = (TextView) findViewById(R.id.title_name_tv);
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
swipeRefreshLayout.setOnRefreshListener(this);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addItemDecoration(
new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
}
@Override
public void onRefresh() {
swipeRefreshLayout.postDelayed(new Runnable() {
@Override
public void run() {
swipeRefreshLayout.setRefreshing(false);
onRefreshComplete();
}
},2000);
}
/**
* 擷取資料
*
* @param count 設定要擷取的資料的數量
* @return
*/
protected List<RecyclerItem> getListData(int count) {
if (count == 0)
return null;
List<RecyclerItem> newDatas = new ArrayList<>();
for (int i = 0; i < count; i++) {
if (i%3 == 0) {
newDatas.add(new RecyclerItem("憫農", "唐代詩人李紳", 0));
}else if (i%3 == 1){
newDatas.add(new RecyclerItem("鋤禾日當午,", "汗滴禾下土。", 1));
}else if (i%3 == 2){
newDatas.add(new RecyclerItem("誰知盤中餐, ", "粒粒皆辛苦。", 2));
}
}
return newDatas;
}
protected abstract void onRefreshComplete();
}
- 一個item(view_list_item)的視圖檔案和擴充卡QuickAdapter
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/view_list_item_ll"
android:orientation="horizontal" android:layout_width="match_parent"
android:padding="10dp"
android:layout_height="wrap_content">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/gardenia"
android:scaleType="centerCrop"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="vertical">
<TextView
android:id="@+id/list_item_title_tv"
style="@style/TextStyle_14sp_666"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0"
android:gravity="center_vertical"
android:layout_marginLeft="10dp"
android:textStyle="bold"
android:text="标題1" />
<TextView
android:id="@+id/list_item_content_tv"
style="@style/TextStyle_14sp_666"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:gravity="center_vertical"
android:layout_marginLeft="10dp"
android:text="内容1" />
</LinearLayout>
</LinearLayout>
public class QuickAdapter extends BaseQuickAdapter<RecyclerItem,BaseViewHolder> {
public QuickAdapter() {
super(R.layout.view_list_item);
}
@Override
protected void convert(BaseViewHolder helper, RecyclerItem item) {
helper.setText(R.id.list_item_title_tv,item.getTitle())
.setText(R.id.list_item_content_tv,item.getContent());
helper.getView(R.id.list_item_content_tv).setSelected(true);
}
}
- 實作類QuickActivity
public class QuickActivity extends BaseRecyclerViewActivity {
private QuickAdapter quickAdapter;
@Override
protected int getLayoutResId() {
return super.getLayoutResId();
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
titleNameTv.setText("BaseQuickAdapter的基礎使用");
ExtraView headerView = new ExtraView(this);
headerView.setContent("頭部,點選添加,長按删除。");
ExtraView footerView = new ExtraView(this);
footerView.setContent("這是我的尾部。");
quickAdapter = new QuickAdapter();
quickAdapter.openLoadAnimation(BaseQuickAdapter.SLIDEIN_RIGHT);
quickAdapter.addHeaderView(headerView);
quickAdapter.addFooterView(footerView);
recyclerView.setAdapter(quickAdapter);
quickAdapter.setNewData(getListData(6));
initListener();
}
private void initListener() {
// item點選事件,功能:顯示點選位置
recyclerView.addOnItemTouchListener(new OnItemClickListener() {
@Override
public void onSimpleItemClick(BaseQuickAdapter adapter, View view, int position) {
ToastUtils.showShortToast(position + quickAdapter.getItem(position).getTitle());
}
});
// 頭部視圖點選事件,添加資料
quickAdapter.getHeaderLayout().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
quickAdapter.addData(0,getListData(2));
}
},500);
}
});
// 頭部視圖長按事件,删除資料
quickAdapter.getHeaderLayout().setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 3; i++) {
quickAdapter.remove(3);
}
recyclerView.scrollToPosition(0);
}
},500);
return true;
}
});
// item長按事件,功能:删除長按item
recyclerView.addOnItemTouchListener(new OnItemLongClickListener() {
@Override
public void onSimpleItemLongClick(BaseQuickAdapter adapter, final View view,
final int position) {
SnackbarUtils.showLongSnackbar(
view,
"删除了:" + quickAdapter.getItem(position).getTitle(),
Color.WHITE,Color.BLACK);
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
quickAdapter.remove(position);
}
},500);
}
});
// 加載更多
quickAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
@Override
public void onLoadMoreRequested() {
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
quickAdapter.addData(getListData(3));
quickAdapter.loadMoreComplete();
}
},500);
}
});
}
@Override
protected void onRefreshComplete() {
quickAdapter.addData(0,getListData(1));
recyclerView.scrollToPosition(0);
}
}
效果圖如下: