Android 怎麼用RecyclerView完成表格實現
阿新 • • 發佈:2021-02-19
技術標籤:程式設計
今天專案發現需要做一個用Android做一個表格, 然後從網上搜了一大推,可以倒是可以,但是不符合我的要求, 我的表格列表裡面有textview ,有checkbox ,有button。 但是網上的大都是文字展示的表格。沒辦法只有自己做了。
我用的是RecyclerView實現表格, 應為RecyclerView裡面可以適配item,item就可以解決放置不同的控制元件, 並且可以設定每個控制元件所佔的橫向權重(這裡的介面卡是橫向佈局的, 通過RecyclerView適配之後就變成表格了。當然這裡有一個問題需要去解決, 那就是表格他有自己固定的寬高,但是RecyclerView通過item的數量才能決定他的寬高, 只要我們解決掉控制RecyclerView的寬高, 並且item 等比展示就可以,好了話不多說程式碼整齊。
首先我們需要設定RecyclerView的寬高
private void tableRecyclerView(){ ViewTreeObserver vto2 = tableRecyclerView.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { tableRecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getBaseActivityContext()); linearLayoutManager.setOrientation(RecyclerView.VERTICAL); tableRecyclerView.setLayoutManager(linearLayoutManager); List<TaskTableBean> taskDetailTables = new ArrayList<>(); taskDetailTables.add(new TaskTableBean(getString(R.string.task_pre_deal), getString(R.string.task_check_self), getString(R.string.task_check))); taskDetailTables.add(new TaskTableBean("啊空間的飯卡撒動閥深刻搭街", getString(R.string.deal_overed), getString(R.string.deal_overed))); taskDetailTables.add(new TaskTableBean("撒旦發射點", getString(R.string.pre_deal), getString(R.string.pre_deal))); taskDetailTables.add(new TaskTableBean("在的擊發送", getString(R.string.deal_overed), getString(R.string.deal_overed))); taskDetailTables.add(new TaskTableBean("是德國的方", getString(R.string.pre_deal), getString(R.string.pre_deal))); taskDetailTables.add(new TaskTableBean("的複合計劃", getString(R.string.deal_overed), getString(R.string.deal_overed))); TableAdapter tableAdapter = new TableAdapter(taskDetailTables, getBaseActivityContext(), tableRecyclerView.getHeight(), recyclerView.getWidth()); tableRecyclerView.setAdapter(tableAdapter); } }); }
應為頁面載入前不能測量控制元件的寬高所以需要通過這個監聽獲取RecyclerView的寬高, 然後就是介面卡的實現,寫法基本一樣這裡的itemCount()可以傳進來的資料來源的長度
@Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { TableHolder tableHolder = (TableHolder) holder; ViewGroup.LayoutParams layoutParams = tableHolder.itemView.getLayoutParams(); layoutParams.height = parentHeight / getItemCount(); tableHolder.itemView.setLayoutParams(layoutParams); }