1:利用json(json格式的配置文件)和jquery 实现根据配置的页面展示
$.get("js/ymcfg.json", function (data) {
parseinit(JSON.parse(data));
},"json");
var parseinit = function (jsonObj) {
//可以将json对象进行遍历展现到页面
}
js的一些小东东综合:
(1):js中数组的定义:var arr = [];
(2):js中对象的定义:var goodArrmap = new Object();//Object类型在js中是个天然的map 用起来很方便
(3):js中json对象的定义:var json = {};
(4):js中将json对象转换为json字符串:JSON.stringify(json);
(5) js数组中移除某一个元素可以使用下面的function:
Array.prototype.baoremove = function(dx)
{
if(isNaN(dx)||dx>this.length){return false;}
this.splice(dx,1);
}
如 arr.baoremove(2);
附:ymcfg.json 的配置文件为:
[
{
"id" : "searchType",
"value" : "文档类型",
"ifMultiSel" : "false",
"Operator" : "in",
"DataType" : "string",
"typeItems" : [{
"id" : "searchTypeNoLimit",
"value" : "不限",
"able" : "#resType,#proType"
}, {
"id" : "resReport",
"value" : "word",
"able" : "#resType;#proType",
"disable" : "#resType(null);#proType(null)"
}, {
"id" : "appTool",
"value" : "excle",
"able" : "#resType(#resTypeNoLimit,#online_rpt);#proType(#proTypeNoLimit,#colligateBusi,#net)",
"disable" : "#resType(#kpi_normal,#analysis,#cub,#cst,#report,#res_default,#sql,#view,#res_link,#pms_price,#pms_active,#tbl,#repository);#protype(#terminal,#famlymarket,#datamarket)"
}
]
},
{
"id" : "resType",
"value" : "子类型",
"ifMultiSel" : "true",
"Operator" : "in",
"DataType" : "string",
"typeItems" : [{
"id" : "resTypeNoLimit",
"value" : "不限",
"able" : "#proType"
}, {
"id" : "kpi_normal",
"value" : "PPT",
"able" : "#proType",
"disable" : "#proType(null)"
}
]
},
]
附件中是一个实现页面动态配置的小例子。
onInterceptTouchEvent用于改变事件的传递方向。决定传递方向的是返回值,返回为false时事件会传递给子控件,返回值为true时事件会传递给当前控件的onTouchEvent(),这就是所谓的Intercept(拦截)。
[tisa ps:正确的使用方法是,在此方法内仅判断事件是否需要拦截,然后返回。即便需要拦截也应该直接返回true,然后由onTouchEvent方法进行处理。]
onTouchEvent用于处理事件,返回值决定当前控件是否消费(consume)了这个事件。尤其对于ACTION_DOWN事件,返回true,表示我想要处理后续事件;返回false,表示不关心此事件,并返回由父类进行处理。
可能你要问是否消费了又区别吗,反正我已经针对事件编写了处理代码?答案是有区别!比如ACTION_MOVE或者ACTION_UP发生的前提是一定曾经发生了ACTION_DOWN,如果你没有消费ACTION_DOWN,那么系统会认为ACTION_DOWN没有发生过,所以ACTION_MOVE或者ACTION_UP就不能被捕获。
在没有重写onInterceptTouchEvent()和onTouchEvent()的情况下(他们的返回值都是false), 对上面这个布局,MotionEvent事件的传递顺序如下:
当某个控件的onInterceptTouchEvent()返回值为true时,就会发生截断,事件被传到当前控件的onTouchEvent()。如我们将LayoutView2的onInterceptTouchEvent()返回值为true,则传递流程变成:
如果我们同时将LayoutView2的onInterceptTouchEvent()和onTouchEvent()设置成true,那么LayoutView2将消费被传递的事件,同时后续事件(如跟着ACTION_DOWN的ACTION_MOVE或者ACTION_UP)会直接传给LayoutView2的onTouchEvent(),不传给其他任何控件的任何函数。同时传递给子空间一个ACTION_CANCEL事件。传递流程变成(图中没有画出ACTION_CANCEL事件):
[tisa ps:总体来看, onInterceptTouchEvent是自rootview向下传递, onTouchEvent正好相反。]
见附件吧
工程里代码
public void onTouchingLetterChanged(String s) {
// TODO Auto-generated method stub
if (alphaIndexer(s) >= 0) {
int position = alphaIndexer(s);
personList.setSelection(position);
overlay.setText(s);
overlay.setVisibility(View.VISIBLE);
handler.removeCallbacks(overlayThread);
handler.postDelayed(overlayThread, 1500);
}
}
if (alphaIndexer(s) >= 0) {
工程里是>,需要改成>=。