FormLayoutManager首頁,裏面有github地址
BaseFormModel基類
public abstract class BaseFormModel {
protected List<Integer> textColors = new ArrayList<>();
protected List<Integer> bgColors = new ArrayList<>();
public List<Integer> getTextColors() {
return textColors;
}
public void setTextColors(List<Integer> textColors) {
this.textColors = textColors;
}
public List<Integer> getBgColors() {
return bgColors;
}
public void setBgColors(List<Integer> bgColors) {
this.bgColors = bgColors;
}
}
這個類的內容比較少,就保存一個字體顏色列表和背景顏色列表。假如你的表格是水平表格(即一行代表一個實體那種)。那這個字體顏色列表就是代表一行item的字體顏色(背景顏色列表同理)。
Adapter基類的onBindViewHolder
這裏只拿BaseHFormAdapter來說明,以前介紹的Adapter基類的onBingViewHolder代碼和下面的有點不同,因爲下面是最新的代碼邏輯。
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
List<Integer> colorList = new ArrayList<>();
int rowIndex = position / getColumnCount();
int columnIndex = position % getColumnCount();
T model = mList.get(rowIndex);
String rowData = getRowData(model, columnIndex);
if (model instanceof BaseFormModel){
List<Integer> textColors = getTextColors((BaseFormModel) model);
List<Integer> bgColors = getBgColors((BaseFormModel) model);
if (textColors.size() > 0){
colorList.add(textColors.get(columnIndex));
}
if (bgColors.size() > 0){
colorList.add(bgColors.get(columnIndex));
}
Integer[] colors = new Integer[colorList.size()];
colorList.toArray(colors);
setData(holder, rowIndex, columnIndex, rowData, colors);
}
setData(holder, rowIndex, columnIndex, rowData);
}
與以前不同的是,增加一個判斷
if (model instanceof BaseFormModel){
.....
}
只要你的實體繼承了BaseFormModel,就會進入這個條件內,這段邏輯就會調用帶有colors參數的setData方法,然後你自己寫的adapter就可以重寫這setData的方法,從而使用colors
@Override
protected void setData(RecyclerView.ViewHolder viewHolder, int rowIndex, int columnIndex, String content, Integer... colors) {
ItemHolder holder = (ItemHolder) viewHolder;
holder.tvItem.setText(content);
holder.tvItem.setTextColor(colors[0]);
}
總結
其實之前沒用BaseFormModel,一樣可以不同item設置不同顏色。因爲setData的方法裏可以知道該item所在的行和列,那根據行和列可以拿到該實體的數據,一樣可以判斷要顯示什麼顏色。
但我不太希望把這些判斷顯示什麼顏色的邏輯放到adapter設置數據那裏,我希望的是在構建實體的時候,就把它要設置的對應顏色都配置好,這樣在adapter那裏只要設置數據就行了,不用進行太多的邏輯處理。