『android』常見問題整理

學(xué)習(xí)android一段時(shí)間了,這期間做了兩個(gè)APP,一個(gè)天氣預(yù)報(bào)應(yīng)用,另一個(gè)是求職簡歷應(yīng)用,遇到了許多困難,也學(xué)到了許多知識,在此記錄下學(xué)習(xí)的經(jīng)驗(yàn)以及遇到的問題。
JunzWeather:你的天氣
JunzResume:你的簡歷

問題和心得

  • 模糊查詢

你的天氣這個(gè)項(xiàng)目中,有一個(gè)功能是切換城市,用到了模糊查詢。
標(biāo)準(zhǔn)sql語句是這樣的:

      SELECT DISTINCT area_zh FROM city WHERE area_zh LIKE ‘%cityname%' OR area_en LIKE '%cityname%' ORDER BY area_en;

可以通過“cityname”在表中/英城市名數(shù)據(jù)列中查出城市名并排序。
程序代碼中我最初是這么寫的:
String sql = "SELECT DISTINCT area_zh FROM city WHERE area_zh LIKE '%?%' OR area_en LIKE '%?%' ORDER BY area_en;";
Cursor cursor = db.rawQuery(sql, new String[]{SearchText,SearchText});
無法正常使用,后改成下面代碼能達(dá)到查詢目的:
String sql = "SELECT DISTINCT area_zh FROM city WHERE area_zh LIKE ? OR area_en LIKE ? ORDER BY area_en;";
Cursor cursor = db.rawQuery(sql, new String[] { "%" + SearchText + "%","%" + SearchText + "%" });
由此看來在使用占位符?進(jìn)行模糊查詢時(shí),要將%看做一個(gè)整體,當(dāng)做參數(shù)傳入,如果僅僅把?當(dāng)做參數(shù),%寫入sql字符串,會(huì)使此sql語句語義錯(cuò)誤!

  • ListView更新數(shù)據(jù)

這兩個(gè)項(xiàng)目中都使用了ListView,傳入自定義的adapter顯示數(shù)據(jù)。
但是調(diào)試時(shí)發(fā)現(xiàn)即使動(dòng)態(tài)改變內(nèi)部數(shù)據(jù)后,調(diào)用adapter.notifyDataSetChanged();方法我列表的顯示卻沒有變化!
當(dāng)時(shí)我的更新數(shù)據(jù)方法是這樣寫的:
cityNameList = db.searchAllCityName();
adapter.notifyDataSetChanged();
這么看好像邏輯很正常啊,其實(shí)不然。
我們在將List傳入到adapter之后,adapter保存了指向list對象的引用,用以顯示其中數(shù)據(jù)。
但是代碼cityNameList = db.searchAllCityName();會(huì)讓cityNameList指向一個(gè)新的List對象,而adapter內(nèi)部指向保存數(shù)據(jù)的對象未改變,而且由于cityNameList引用的改變,我們也無法再訪問到保存數(shù)據(jù)的List集合,所以無論如何操縱,顯示的數(shù)據(jù)自然不會(huì)改變!
因此,正確的寫法是:
cityNameList.clear();
cityNameList.addAll(db.searchAllCityName());
adapter.notifyDataSetChanged();
先將List清除,在把查詢的加過全部加到List集合中,通知adapter更新數(shù)據(jù)。

  • APP啟動(dòng)關(guān)閉標(biāo)題欄

在我們調(diào)試或者運(yùn)行APP的時(shí)候,會(huì)發(fā)現(xiàn)在軟件啟動(dòng)時(shí)會(huì)屏幕上方會(huì)短暫出現(xiàn)一個(gè)標(biāo)題欄,非常影響視覺體驗(yàn)。那如何去掉這個(gè)bar呢?
最簡單的方法就是打開項(xiàng)目的AndroidManifest.xml找到android:theme屬性,將主題設(shè)置為Theme.NoTitleBar,這樣就不會(huì)出現(xiàn)啟動(dòng)時(shí)那個(gè)標(biāo)題欄了。

  • 背景選擇器selector

當(dāng)我們點(diǎn)擊,按住一個(gè)控件,比如按鈕時(shí),有時(shí)我們會(huì)希望它的背景圖片發(fā)生變化,這樣可以使應(yīng)用更人性化。這是就要用到了選擇器。
選擇器是以xml文件放在res/drawable文件夾下的,完成后在布局文件中的android:background="@drawable/xxx.xml"屬性引用該文件即可。比如在你的簡歷項(xiàng)目中,其中的按鈕默認(rèn)為白色,當(dāng)點(diǎn)擊或按住時(shí)則顯示為黃色,寫法如下:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/btn_add_click" android:state_pressed="true"/>
    <item android:drawable="@drawable/btn_add_click" android:state_focused="true"/>
    <!-- 正常顯示的樣式放到最后,因?yàn)槿绻诺角懊妫筒患虞d后面的了!所以放到最后 -->
    <item android:drawable="@drawable/btn_add_default" android:state_enabled="true"/>
</selector>

其中android:drawable屬性是你要現(xiàn)實(shí)的圖片ID,android:state_pressed="true"屬性你你顯示該圖片的條件,比如這個(gè)就是在點(diǎn)擊時(shí)切換背景圖片為btn_add_click
有一點(diǎn)要注意,正常顯示的itemandroid:state_enabled="true必須要寫在最后,不然無法正常達(dá)到顯示效果,我最初就是遇到這個(gè)坑,找了好久才發(fā)現(xiàn)問題。
我個(gè)人猜測原因是在加載次xml文件時(shí),加載到這一行就會(huì)停止加載,不再加載后面條目。

  • 記住密碼功能

你的簡歷項(xiàng)目中,實(shí)現(xiàn)了登錄時(shí)記住密碼功能。
該功能是借助SharedPreferences,在onStop()方法里將賬號密碼存入xml文件里,當(dāng)回到該Activity時(shí),在onRame()方法內(nèi)取出存入的賬號信息,達(dá)到記住密碼功能。
注意:存儲(chǔ)數(shù)據(jù)和清除數(shù)據(jù)都要執(zhí)行commit()命令。

  • TextView輸入框不換行

在項(xiàng)目中使用TextView控件時(shí),出現(xiàn)了輸入文字超出輸入框后不換行的現(xiàn)象,在網(wǎng)上查詢答案設(shè)置android:singleLine="false"等等屬性也不起作用。
經(jīng)過自己調(diào)試,終于發(fā)現(xiàn)是因?yàn)榇丝丶?code>TableLayout中,而且我設(shè)置了android:stretchColumns屬性來填充列,這就會(huì)使TextView換行出現(xiàn)問題,解決方法是去掉此屬性或者再加上android:stretchColumns屬性。

  • Toast重復(fù)顯示

Toast是經(jīng)常使用的信息提示工具,當(dāng)我們使用代碼Toast.makeText(context, text, Toast.LENGTH_SHORT).show;,每次觸發(fā)都會(huì)彈出一條Toast,用戶體驗(yàn)非常差,所以我們可以將其封裝成一個(gè)公共方法,每次都是使用同一個(gè)Toasr,顯示不同文本,解決該問題。
代碼如下:

public static void showToast(Context context, String text) {
    if (toast == null) {
        toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
    } else {
        toast.setText(text);
    }
    toast.show();
    }

這里需要傳入一個(gè)context,我發(fā)現(xiàn)其實(shí)只有第一次使用才會(huì)用到context,以后調(diào)用用的都是第一次傳入的,可以正常顯示。

  • 輸入框彈出鍵盤類型

當(dāng)我們做輸入功能時(shí),有時(shí)需要規(guī)定準(zhǔn)備輸入時(shí)彈出鍵盤的類型,這要用到android:inputType屬性,比如要輸入電話就只能彈出數(shù)字鍵盤,則設(shè)置控件屬性為android:inputType="number",這個(gè)屬性有很多參數(shù),可根據(jù)需求選擇。

  • 如何獲取fragment中的控件

你的簡歷這個(gè)項(xiàng)目中,使用了側(cè)滑欄drawerlayout,彈出側(cè)滑欄點(diǎn)擊具體表項(xiàng),就可將對應(yīng)的fragment顯示到主內(nèi)容區(qū)。
那就需要獲取到fragment的控件進(jìn)行操作。在fragment中可以重載onCreateView方法,其中有個(gè)LayoutInflater參數(shù),借助該參數(shù)調(diào)用.inflate(int resource, ViewGroup root, boolean attachToRoot)方法就可以得到一個(gè)返回的view。再借助方法view.findViewById(id)獲得控件。
關(guān)于那三個(gè)參數(shù)的作用可以看看這篇博客:inflate參數(shù)作用

<br /><br /><br /><br />

本人水平有限,如有錯(cuò)誤歡迎指出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,327評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,996評論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,316評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,406評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,128評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,524評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,576評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,759評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,310評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,065評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,249評論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,821評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,479評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,909評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,140評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,984評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,228評論 2 375

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,687評論 25 708
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,469評論 2 45
  • 一、基礎(chǔ)知識 MySQL數(shù)據(jù)庫基本操作知識儲(chǔ)備 數(shù)據(jù)庫服務(wù)器:一臺計(jì)算機(jī)(對內(nèi)存要求比較高) 數(shù)據(jù)庫管理系統(tǒng):如m...
    不_一閱讀 547評論 0 1
  • 不知何時(shí)起,春天就已經(jīng)來了。換上春裝,帶著手機(jī),乘陽光正好去感受春的氣息。路遇一棵垂柳,迎面而來的就是一陣清新,枝...
    木子不愛糖閱讀 297評論 1 2
  • 昨天是母親節(jié),和媽媽去商場逛逛,說是想買禮物給媽媽,不巧遇到了同大院學(xué)妹的媽媽,媽媽間能聊天的只有各個(gè)孩子們之間的...
    業(yè)余詩人Seven閱讀 353評論 0 0