package com.freelib.multiitem.adapter.holder;
import android.support.annotation.NonNull;
import com.freelib.multiitem.item.ItemInput;
import java.util.Collections;
import java.util.Map;
/**
* 录入的的ViewHolderManager
* Created by free46000 on 2017/4/10.
*/
public abstract class InputHolderManager<T extends ItemInput> extends BaseViewHolderManager<T> {
protected Object originalValue;
protected BaseViewHolder viewHolder;
/**
* 录入的key,和{@link #getValue()}一起组装为Map 如果为null则不组装 <br>
* 如果是复杂的录入可以直接覆写{@link #getValueMap()}自己组装key-value Map
*
* @return 录入key
*/
public abstract String getKey();
/**
* 录入的值,和{@link #getKey()}一起组装为Map 如果为null则不组装 <br>
* 如果是复杂的录入可以直接覆写{@link #getValueMap()}自己组装key-value Map
*
* @return 录入值
*/
public abstract Object getValue();
@Override
protected void onCreateViewHolder(@NonNull BaseViewHolder holder) {
super.onCreateViewHolder(holder);
initInputView(holder);
originalValue = getValue();
viewHolder = holder;
}
/**
* 初始化Input视图,由于Input视图不可以复用,所以直接在初始化视图时设置好相关内容即可
*
* @param holder BaseViewHolder
*/
protected abstract void initInputView(BaseViewHolder holder);
@Deprecated
@Override
public void onBindViewHolder(BaseViewHolder holder, T t) {
}
@Deprecated
@Override
public void onBindViewHolder(@NonNull BaseViewHolder holder, @NonNull T t, @NonNull ViewHolderParams params) {
super.onBindViewHolder(holder, t, params);
}
/**
* 复杂业务可以覆写本方法,自定义返回多组key-value
*
* @return 录入的key-value Map
*/
public Map<String, Object> getValueMap() {
String key = getKey();
Object value = getValue();
if (key == null || value == null) {
return null;
}
return Collections.singletonMap(key, value);
}
/**
* 是否在初始化后发生改变,如用户手动更改<br>
* 在{@link #initInputView(BaseViewHolder)}的时候会记录当时的value,然后调用本方法时去做对比
*
* @return true:已改变;false:未改变
*/
public boolean isValueChange() {
Object value = getValue();
return value == null ? null != originalValue : !value.equals(originalValue);
}
/**
* 是否验证有效,如Item不能为空
*
* @return true:有效;false:无效 默认true
*/
public boolean isValueValid() {
return true;
}
@Override
public boolean isClickable() {
return false;
}
}