『android』常見(jiàn)問(wèn)題整理

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

問(wèn)題和心得

  • 模糊查詢

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

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

可以通過(guò)“cityname”在表中/英城市名數(shù)據(jù)列中查出城市名并排序使兔。
程序代碼中我最初是這么寫(xiě)的:
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});
無(wú)法正常使用建钥,后改成下面代碼能達(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 + "%" });
由此看來(lái)在使用占位符?進(jìn)行模糊查詢時(shí),要將%虐沥?看做一個(gè)整體熊经,當(dāng)做參數(shù)傳入,如果僅僅把?當(dāng)做參數(shù)欲险,%寫(xiě)入sql字符串镐依,會(huì)使此sql語(yǔ)句語(yǔ)義錯(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();方法我列表的顯示卻沒(méi)有變化喜每!
當(dāng)時(shí)我的更新數(shù)據(jù)方法是這樣寫(xiě)的:
cityNameList = db.searchAllCityName();
adapter.notifyDataSetChanged();
這么看好像邏輯很正常啊务唐,其實(shí)不然。
我們?cè)趯ist傳入到adapter之后灼卢,adapter保存了指向list對(duì)象的引用绍哎,用以顯示其中數(shù)據(jù)。
但是代碼cityNameList = db.searchAllCityName();會(huì)讓cityNameList指向一個(gè)新的List對(duì)象鞋真,而adapter內(nèi)部指向保存數(shù)據(jù)的對(duì)象未改變崇堰,而且由于cityNameList引用的改變,我們也無(wú)法再訪問(wèn)到保存數(shù)據(jù)的List集合涩咖,所以無(wú)論如何操縱海诲,顯示的數(shù)據(jù)自然不會(huì)改變!
因此檩互,正確的寫(xiě)法是:
cityNameList.clear();
cityNameList.addAll(db.searchAllCityName());
adapter.notifyDataSetChanged();
先將List清除特幔,在把查詢的加過(guò)全部加到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)題欄薄风,非常影響視覺(jué)體驗(yàn)。那如何去掉這個(gè)bar呢拍嵌?
最簡(jiǎn)單的方法就是打開(kāi)項(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"屬性引用該文件即可。比如在你的簡(jiǎn)歷項(xiàng)目中他嚷,其中的按鈕默認(rèn)為白色蹋绽,當(dāng)點(diǎn)擊或按住時(shí)則顯示為黃色芭毙,寫(xiě)法如下:

<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必須要寫(xiě)在最后,不然無(wú)法正常達(dá)到顯示效果钝域,我最初就是遇到這個(gè)坑讽坏,找了好久才發(fā)現(xiàn)問(wèn)題。
我個(gè)人猜測(cè)原因是在加載次xml文件時(shí)例证,加載到這一行就會(huì)停止加載路呜,不再加載后面條目。

  • 記住密碼功能

你的簡(jiǎn)歷項(xiàng)目中织咧,實(shí)現(xiàn)了登錄時(shí)記住密碼功能胀葱。
該功能是借助SharedPreferences,在onStop()方法里將賬號(hào)密碼存入xml文件里笙蒙,當(dāng)回到該Activity時(shí)抵屿,在onRame()方法內(nèi)取出存入的賬號(hào)信息,達(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)過(guò)自己調(diào)試燕耿,終于發(fā)現(xiàn)是因?yàn)榇丝丶?code>TableLayout中,而且我設(shè)置了android:stretchColumns屬性來(lái)填充列姜胖,這就會(huì)使TextView換行出現(xiàn)問(wè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,顯示不同文本晨抡,解決該問(wèn)題氛悬。
代碼如下:

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)用用的都是第一次傳入的如捅,可以正常顯示。

  • 輸入框彈出鍵盤(pán)類型

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

  • 如何獲取fragment中的控件

你的簡(jiǎn)歷這個(gè)項(xiàng)目中娄柳,使用了側(cè)滑欄drawerlayout寓辱,彈出側(cè)滑欄點(diǎn)擊具體表項(xiàng),就可將對(duì)應(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)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市墓造,隨后出現(xiàn)的幾起案子堪伍,更是在濱河造成了極大的恐慌锚烦,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帝雇,死亡現(xiàn)場(chǎng)離奇詭異涮俄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)尸闸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)彻亲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吮廉,你說(shuō)我怎么就攤上這事苞尝。” “怎么了宦芦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵宙址,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我调卑,道長(zhǎng)抡砂,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任恬涧,我火速辦了婚禮注益,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘气破。我一直安慰自己聊浅,他們只是感情好餐抢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布现使。 她就那樣靜靜地躺著,像睡著了一般旷痕。 火紅的嫁衣襯著肌膚如雪碳锈。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天欺抗,我揣著相機(jī)與錄音售碳,去河邊找鬼。 笑死绞呈,一個(gè)胖子當(dāng)著我的面吹牛贸人,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佃声,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼艺智,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了圾亏?” 一聲冷哼從身側(cè)響起十拣,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤封拧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后夭问,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體泽西,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年缰趋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捧杉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秘血,死狀恐怖糠溜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情直撤,我是刑警寧澤非竿,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站谋竖,受9級(jí)特大地震影響红柱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蓖乘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一锤悄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘉抒,春花似錦零聚、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至岗宣,卻和暖如春蚂会,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耗式。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工胁住, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刊咳。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓彪见,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親娱挨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子余指,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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

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