天天看點

BaseRecyclerViewAdapterHelper之BaseQuickAdapter的基礎用法

  • 一個實體類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);
    }
}      

效果圖如下:

BaseRecyclerViewAdapterHelper之BaseQuickAdapter的基礎用法