Android項目開發心得(一)


         最近一段時間一直做一個Android的項目,自己雖說已經學了很久了,可是這實踐起來還真是遇到了不少的問題,因為公司有自己的開發模式,擁有着與眾不同的開發方式。因為公司一直是以模型(這里所謂的模型就是xml文檔)來生成界面,然后就是大量的前台腳本,能夠很好的做到用戶的體驗性,Remoting的使用讓我對.Net的認識又有了一個新的台階。因為公司就是這樣的沒辦法之下不能按照正常的方式來開發Android版本,界面的展示也要動態的來生成,這樣無疑給我增加了一個很大的難度。
難度一:因為在動態生成控件的時候,Id的賦值就是一個,因為以后在進行編輯的時候需要更具這個Id來查找控件,然后再獲取其中的值。還有就是控件在生成的時候是需要生成一個TextView還是一個EditText,還是Spinner或者是ListView等等這些要更模型中的數據類型來生成,這到不是很難,難的就是我們在生成一個Spinner的時候我們需要為其綁定數據源,對於數據的來源我們該怎樣獲得,不能寫死,要是寫死的假如界面的元素添加新的了,或是刪除了代碼需要重新改寫,不利於以后的維護,這又成了我一個頭疼的問題,雖說知道在arrays.xml中進行配置,可是怎么知道哪個控件要綁定哪個數據源呢,這又是一個難題,我的辦法就是把String-array的名字以要生成的控件的Code來命名,這樣再遍歷的時候我們可以根據Code來查找相應的數據源,可是事情到這問題又來了,Android中能否支持根據名字來找到相應的Id呢,這又讓我頭疼,問題總是這樣,一個問題解決了總是會帶出其他的問題,沒辦法只能查看API,網上找解決辦法,這時幸運的找到了,Android中有個叫getIdentifier()的方法,可是大量的資料顯示是取得資源文件drawable的東西,沒有我想要的取得array,api上講的是可以獲得,自己試了好幾次總是失敗,不知道是什么原因,以為不支持,可是還是不想放棄,都想要用帶都點的字符串來配置了,然后進行解析字符串,可是問題偏偏在這時候有了好轉,自己試了幾次竟然成功,官方提醒最后不要使用這種辦法,因為性能會不好,可是這個需求我還沒有想到別的更好的辦法來解決,暫時只能現在這樣來解決問題,下面我詳細的把這個方法講解下,因為大量的資料中很少有講解到這些的。一邊以后你再遇到的同時能給你幫助:

使用getIdentifier()獲取資源Id

用getIdentifier()方法可以方便的獲各應用包下的指定資源ID。 主要有兩種方法: (1)方式一 Resources resources = context.getResources(); int indentify = resources.getIdentifier(org.loveandroid.androidtest:drawable/icon",null,null); if(indentify>0){     icon = resources.getDrawable(indentify); }

1. 第一個參數格式是:包名 + : + 資源文件夾名 + / +資源名;是這種格式 然后其他的可以為null

(2)方式二 Resources resources = context.getResources(); int indentify= getResources().getIdentifier("icon", "drawable", "org.anddev.android.testproject");

1. 第一個參數為ID名,第二個為資源屬性是ID或者是Drawable,第三個為包名。

(3)下面說下獲取資源中的其他資源:

    1.要是想獲得string可以這樣寫:

    getResources().getIdentifier("name", "string", packdgeName);

    2.要是想獲得array中的數組,可以這樣寫:

    getResources().getIdentifier("name", "array", packdgeName);

寫了這些其他我估計你就明白了。 如果找到了,返回資源Id,如果找不到,返回0 。 寫了一個方法:獲取資源ID,如果不存在返回0 static int getResourceId(Context context,String name,String type,String packageName){         Resources themeResources=null;         PackageManager pm=context.getPackageManager();         try {             themeResources=pm.getResourcesForApplication(packageName);             return themeResources.getIdentifier(name, type, packageName);         } catch (NameNotFoundException e) {
            e.printStackTrace();         }         return 0; } 從數據庫里讀取圖片名稱,然后調用圖片。直接用R.drawable.?無法調用。查了好多地方最后找到了個方法,分享給大家,希望有幫助。 主要由兩種方法,個人建議第二種。 1. 不把圖片放在res/drawable下,而是存放在src某個package中(如:com.drawable.resource),這種情況下的調用方法為: String path = "com/drawable/resource/imageName.png"; InputStream is = getClassLoader().getResourceAsStream(path); Drawable.createFromStream(is, "src");
2. 如果還是希望直接使用res/drawable中的圖片,就需要通過下面的方法了: 假設創建工程的時候,填寫的package名字為:com.test.image int resID = getResources().getIdentifier("imageName", "drawable", "com.test.image"); Drawable image = getResources().getDrawable(resID);

 

難度二:

就是在數據存儲的時候怎么樣使得界面中多有控件的值賦值到平台的xml中(因為公司的數據存儲要將數據先存到xml中,然后dataset.readxml()來將數據讀取,最后進行保存),這樣我怎么樣來獲得值呢,這就又是我的一個問題,想了好久想到的辦法就是在生成界面元素的時候將控件的id,code以id為鍵值存儲到hashmap中,再用到的時候可以去hashmap中去查找,這樣我的問題也就解決了。這是我這段時間做Android的感受,記錄點點滴滴,贏取我的最大的進度。因為一時沒時間,還有很多問題沒有整理,精彩內容在Android項目開發心得(二)敬請關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM