使用时,需要自定义方法时:
public class MIFunction extends Function{
public MIFunction(String functionName, DataType[] argumentsDataType) {
super(functionName,argumentsDataType);
// TODO Auto-generated constructor stub
}
@Override
public int getArgumentNum() {
// TODO Auto-generated method stub
return 1;
}
@Override
protected Object executeFunction(Valuable[] arguments)
throws ArgumentsMismatchException {
// TODO Auto-generated method stub
double value1 = ((BigDecimal)arguments[0].getValue()).doubleValue();
Log.e("1111111", "value1=>"+value1);
double value2 = ((BigDecimal)arguments[1].getValue()).doubleValue();
Log.e("2222222", "value2=>"+value2);
double value = value1*Math.pow(1.3,(20-value2)/10);
return 10;
}
}
public void drive() {
if (!exps.isEmpty()) {
ExpressionFactory factory = ExpressionFactory.getInstance();
for (Cell cell : exps) {
//获取公式
String expStr = ((DefaultCell)cell).getExpression();
if(!expStr.endsWith(";"))
expStr += ";";
//获取标记
String paraStr = ((DefaultCell)cell).getPramTags();
final String[] para = paraStr.split(",");
/*if(!TextUtils.isEmpty(paraStr)){
final String[] para = paraStr.split(",");
}*/
// String tag = ((DefaultCell)cell).getTag();
//当前的edittext
final EditText target = (EditText) root.findViewWithTag(((DefaultCell)cell).getTag());
HashMap<String, EditText> map = new HashMap<String, EditText>();
final Expression exp = factory.getExpression(expStr);
//将当前公式加入
addFunction(exp, expStr);
//根据tag在布局找到控件
findView(para, map, root);
for (Map.Entry<String, EditText> entry : map.entrySet()) {
setWatcher(context, para, target, exp, entry, root, ((DefaultCell)cell).getName(),isClean);
}
}
}
}
private void findView(String[] para, HashMap<String, EditText> map,
LinearLayout root) {
if(para!=null&¶.length>0){
for (String tag : para) {
if (TextUtils.isEmpty(tag))
continue;
EditText p = null;
if (tag.startsWith("_")) {
p = (EditText) root.findViewWithTag(tag.substring(1));
} else {
p = (EditText) root.findViewWithTag(tag);
}
map.put(tag, p);
}
}
}
private void setWatcher(Context context, String[] para, EditText target,
Expression exp, Map.Entry<String, EditText> entry,
LinearLayout root, String defaultStr,boolean isClean) {
EditText et = entry.getValue();
String tag = entry.getKey();
if(tag.startsWith("_"))
return;
//设置的监听事件,ExpressionWatcher 继承自TextWatcher。
watcher.setDefaultStr(defaultStr);
et.addTextChangedListener(watcher);
}