亚洲成人伦理_成人午夜视频在线观看_日本免费网站_黄网站色大毛片_超碰97人人人人人蜜桃_久久在线视频


曙海教育集團(tuán)論壇3G手機(jī)技術(shù)專(zhuān)區(qū)Android應(yīng)用開(kāi)發(fā) → Android 實(shí)例


  共有7422人關(guān)注過(guò)本帖樹(shù)形打印

主題:Android 實(shí)例

美女呀,離線(xiàn),留言給我吧!
wangxinxin
  1樓 個(gè)性首頁(yè) | 博客 | 信息 | 搜索 | 郵箱 | 主頁(yè) | UC


加好友 發(fā)短信
等級(jí):青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊(cè):2010-11-12 11:08:23
Android 實(shí)例  發(fā)帖心情 Post By:2010-12-3 13:02:17

ColaBox 登記收支記錄終于進(jìn)入了復(fù)雜階段了.這個(gè)界面我也是查找了很多資料以及打開(kāi)android的源代碼看了后才完成了,現(xiàn)在想來(lái)Google的開(kāi)源真是明智的啊. gn7pIoN  
f'*HP%+Y  
從前面的登錄頁(yè)面跳轉(zhuǎn)進(jìn)入添加賬單頁(yè)面.這個(gè)頁(yè)面主要是用來(lái)登記收支記錄的. R0{+Xd  
說(shuō)白了就是往數(shù)據(jù)庫(kù)錄入明細(xì). n0nkv[  
w Xfy,W  
表結(jié)構(gòu)就是db.execSQL("CREATE TABLE bills (" Onby=Y o6  
"_ID INTEGER PRIMARY KEY," //id t4 h5R  
"fee integer," //費(fèi)用 ,NKDEcw]  
"acctitemid integer," //賬目類(lèi)型 h?fv :^vSi  
"userid integer," //使用者 r's4 -\  
"sdate TEXT," //日期 Bglh}_X  
"stime TEXT," //時(shí)間 M {_`X  
"desc TEXT" //備注 #W'jNX,h  
");"); $UgM7V$  
Q_qc_IcM y  
可以看到主要是錄入這些數(shù)據(jù).首先是布置界面,我目前想到的用個(gè)tablelayout來(lái)布局 !2$O^ }6"  
最后布局就是如下圖這樣 Z Oyq{w!2  
#*1\h=bzmW  
圖1 gfFP-J3cN  
rW&8#&  
gNo.&G [  
/t(dhz&xN  
b-;+&Rb  
在這兒我首先需要設(shè)置賬目,前面我們已經(jīng)初始化過(guò)賬目的數(shù)據(jù). 8 U B?X  
賬目應(yīng)該是一個(gè)ExpandableListActivity 2層的結(jié)構(gòu).需要從數(shù)據(jù)庫(kù)里面讀取.我在賬目后面放了一個(gè)editview 只讀沒(méi)有光標(biāo)的.也就是在這兒不可錄入,在該editview的onclick事件里面我們打開(kāi)賬目選擇界面.如下圖 tHJ#2X#Y.  
=k 2In_  
圖2 賬目選擇 0' @^PzX  
(B}+uI{  
k"LbB#Q  
ZYos.ay  
I;S[Ft8d  
在這個(gè)界面中點(diǎn)擊子節(jié)點(diǎn)就返回前面界面,把選擇的賬目傳遞過(guò)去.在這有個(gè)問(wèn)題,如果用戶(hù)需要錄入的賬目沒(méi)有怎么辦? ik=~`3Zp0  
所以我這沒(méi)有用dialog方式而是用了ExpandableListActivity在這個(gè)界面中如果長(zhǎng)點(diǎn)某個(gè)子節(jié)點(diǎn)就彈出管理賬目菜單, \`-/\N  
來(lái)維護(hù)賬目,如下圖所示: OQ;DqV  
圖3賬目選擇菜單示意 圖4 編輯賬目 ^z-e"  
`7zz&f9dDX  
,a9<\bd)  
HF" v \  
C\Qor3];  
-9Wx;u4]o  
kz\ D-b  
上面這些流程說(shuō)起來(lái)很簡(jiǎn)單,可是當(dāng)我用andriod編寫(xiě)時(shí),遇到了很多問(wèn)題,不過(guò)一個(gè)個(gè)都被我解決了,這正是編程的快樂(lè)所在. `VCU`Y  
關(guān)于ExpandableListActivity 大家可以參考android 里面apidemos 里面ExpandableList1,ExpandableList2,ExpandableList3 =/&ob%J)9]  
這里面對(duì)熟悉這個(gè)ui還是很有幫助的. 在ExpandableList2 里面就是從數(shù)據(jù)庫(kù)進(jìn)行讀取的例子. 當(dāng)然android里面那個(gè)我是沒(méi)太 ER~m &JI  
看明白因?yàn)樗昧薸mport android.provider.Contacts.People; 聯(lián)系人部分的框架,而我目前對(duì)數(shù)據(jù)庫(kù)的操作和他不一樣,我都是直接 R ,-y  
sql訪(fǎng)問(wèn). Y O;N9wu3f  
但是你只要搞定2個(gè)cursor就ok了. Cursor groupCursor childCursor 其他都由SimpleCursorTreeAdapter幫你實(shí)現(xiàn)了. .<} (J#vC  
下面我們來(lái)看看如何使用SimpleCursorTreeAdapter t33/QW r  
//首先要實(shí)現(xiàn)groupcursor就是父節(jié)點(diǎn)游標(biāo),這個(gè)其實(shí)就是我的acctitem表的 ?W-J2tgss{  
//select * from accitem where pid is null 的結(jié)果 0 {#c  
Cursor groupCursor = billdb.getParentNode(); >MZWm6M8  
// Cache the ID column index ":E fR`A#  
mGroupIdColumnIndex = groupCursor.getColumnIndexOrThrow("_ID"); m,NUNd#)\  
// Set up our adapter 0j\?zt?  
mAdapter = new MyExpandableListAdapter(groupCursor, this, android.R.layout.simple_expandable_list_item_1, (~}IoQp>  
android.R.layout.simple_expandable_list_item_1, ]4wyuP,up  
new String[] { "NAME" }, // Name for group layouts zBD ?O!  
new int[] { android.R.id.text1 }, 8wz%e(  
new String[] { "NAME" }, // Lsa&A+fru  
new int[] { android.R.id.text1 }); Nr)v!z~y   
setListAdapter(mAdapter); spter35b[  
rUvjc4O}  
//然后我要實(shí)現(xiàn)childCursor 1M+o7HO.mG  
//其實(shí)就是select * from acctitem where id=pid 的結(jié)果 Wm>[5h%>  
public class MyExpandableListAdapter extends SimpleCursorTreeAdapter { <y#-I%ed  
public MyExpandableListAdapter(Cursor cursor, Context context, 1xN6V-qk  
int groupLayout, int childLayout, String[] groupFrom, Pf&\2_H3s9  
int[] groupTo, String[] childrenFrom, int[] childrenTo) j9"uxw@  
{ A;~lG3j4  
super(context, cursor, groupLayout, groupFrom, groupTo, c\"t+/Z  
childLayout, childrenFrom, childrenTo); +vOlA#t%Z  
} b[&A,ZPh$@  
protected Cursor getChildrenCursor(Cursor groupCursor) { m(MPVY<X  
String pid = groupCursor.getLong(mGroupIdColumnIndex) ""; $="t7C9S  
// Log.v("cola","pid=" pid); ~aKM+KmtPH  
return billdb.getChildenNode(pid); /5cFa  
} 9G njJ  
} R@*mMWW,  
//我們看看Billdbhelper里面的cursor _dQVundH  
public Cursor getParentNode(){ QwF\s13  
return db.query("acctitem", new String[]{"_id", "name" }, "pid is null", null, null, null, "pid,_id"); ;. jnRPo";  
Md!L@gX6<  
} ,3 !D(&  
xd[GJ;xvs  
public Cursor getChildenNode(String pid){ 61qs`N=k  
Log.v("cola","run getchildenNode"); KDx~^OO  
return db.query("acctitem", new String[]{"_id", "name" }, "pid=" pid, null, null, null, "_id"); +{b!,D3sa*  
} SVr3OyzI  
只要這幾步一個(gè)2級(jí)的tree list就可以出現(xiàn)了. >j5,Z]  
上面其實(shí)才是剛開(kāi)始,后面我們需要使用一個(gè)自定義的Dialog 類(lèi)似于一個(gè)inputBox 因?yàn)槲覀冃略鲑~目是需要輸入賬目的名稱(chēng). \BIa:}9O  
就是上面圖4表現(xiàn)的. e_eNtVq  
雖然alertDialog提供了很多方法,可以選擇list,treelist,radio, 可惜就是不能錄入text. aT9+] Ig  
這里我參考了api demos 里面的 DateWidgets1.java 和源代碼里面DatePickerDialog.java . KyQO>g{R  
我們可以從alertdialog 繼承.然后添加一個(gè)Editview 最后把數(shù)據(jù)返回出來(lái).只要把上面我說(shuō)的2個(gè)java看清楚了后處理起來(lái)就簡(jiǎn)單了. [73 \jT  
主要是一個(gè)回調(diào)函數(shù)的用法.下面看代碼 B=0U^wL  
// <F>^ffwGH-  
public class Dialog_edit extends AlertDialog implements OnClickListener { nRP|Qt7>  
private String text = ""; *=sMJY9#jE  
private EditText edit; 6Kl%|VrJs  
private OnDateSetListener mCallback; //定義回調(diào)函數(shù) cst}/8e  
private LinearLayout layout; -<g&U*/E  
public interface OnDateSetListener {//回調(diào)接口 9.:]eL  
void onDateSet(String text); 3/aK#TjK  
} >,Z[IAU.x5  
protected Dialog_edit(Context context, String title, String value, Ipp#{'Do  
OnDateSetListener Callback) { Qkvg 85  
super(context); xJ$/#UdP  
mCallback = Callback; <:n !qQS6  
TextView label = new TextView(context); { R`"Nk  
label.setText("hint"); FI(iqSJ6  
// setView(label); wHR# -g'  
edit = new EditText(context); > u!# 4  
edit.setText(value); 0| }]=XN^  
layout = new LinearLayout(context); Gp9:#L!  
layout.setOrientation(LinearLayout.VERTICAL); \C}_l+nY  
// LinearLayout.LayoutParams param = [S_qi,  
// new LinearLayout.LayoutParams(100, 40); k d9<&.y{  
// layout.addView(label, param); '* eeup  
LinearLayout.LayoutParams param2 = new LinearLayout.LayoutParams(200, y,xJ5BI$  
50); ]ft}fU5C1  
layout.addView(edit, param2); .Y5o&at6s  
//添加edit !dV2:`|+  
setView(layout); ".7\>8A#a  
setTitle(title); 6qd?&.=r  
setButton("確定", this); P47 x-;  
setButton2("取消", (OnClickListener) null); /^sk y!  
} a7}O.NDf  
public void onClick(DialogInterface dialog, int which) { uqvS  
// Log.v("cola","U click which=" which); 2&zklXuo:  
text = edit.getText().toString(); -sxu7I  
Log.v("cola", "U click text=" text); hr W2#v  
if (mCallback != null) abw5Gz@Ag  
mCallback.onDateSet(text);//使用回調(diào)返回錄入的數(shù)據(jù) @~bP|a  
} SQJ +C%   
} ^/I.? :+  
這樣我們就完成了自定義的dialog 我們可以使用它來(lái)新增和編輯賬目. 對(duì)于賬目的增刪改就是sql的事情了 LKBh{X0%(  
在這我又遇到一個(gè)問(wèn)題就是我新增一個(gè)賬目后如何來(lái)刷新界面,從而反映賬目修改后的變化 S1#5oy2  
在這我開(kāi)始以為只要使用getExpandableListView().invalidate(); 就可以了, =E62N7_`=  
因?yàn)槲抑霸贓xpandableList1.java例子里面,使用它可以刷新界面. tgj 5l#P  
在那個(gè)例子里面我修改了數(shù)組后調(diào)用該方法,界面就刷新了,而在這SimpleCursorTreeAdapter就行不通了,我想 *D67&/g.  


支持(0中立(0反對(duì)(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

Android 實(shí)例








簽名
主站蜘蛛池模板: 色频| 国产成人网 | 9191成人精品久久 | 天天爱av| 日韩精品极品视频在线观看免费 | 国产日韩亚洲欧美 | 手机av免费在线 | 久久久久久久一区二区 | 欧美福利网站 | 日韩免费福利视频 | 亚洲一区二区三区 | 色爱综合| 99久久免费精品国产免费高清 | 婷婷午夜天 | 色婷婷亚洲一区二区三区 | 在线观看a视频 | 伊人久久精品 | 天天爽综合网 | 日日草天天干 | 草樱av| 日韩精品一区二区三区中文字幕 | 久久精品无码一区二区三区 | 欧美三级网站 | 夜夜爽99久久国产综合精品女不卡 | 国产精品久久国产精品 | 91免费视频 | 狠狠爱一区二区三区 | 一区二区三区欧美在线观看 | 99久久精品国产一区二区三区 | 国产福利在线视频 | 啪啪av| 久久综合一区 | 久久精品色欧美aⅴ一区二区 | 国产日韩精品视频 | 国产精品自产拍 | 精品视频在线观看 | 黄色电影在线免费观看 | 成人在线观看中文字幕 | 国产精品久久久久久久久免费丝袜 | 国产成人精品久久二区二区 | 日韩国产一区二区 |