日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android细节问题总结(一)

發(fā)布時(shí)間:2025/3/20 Android 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android细节问题总结(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇博客是用來記錄自己在寫代碼的過程中遇到的一些問題,以及解決方法,做一個(gè)總結(jié),算是筆記吧。


1.問題描述:

Listview中adapter的刷新(notifyDataSetChanged())數(shù)據(jù)突然消失問題.

解決方法:

我們的adapter中的一個(gè)List<T>參數(shù),而在調(diào)用adapter的一層(即adapter的上一層)對List<T>進(jìn)行賦值操作,而不是t.add(T)或是t.remove(T)這樣的操作時(shí),我們在adapter.notifyDataSetChanged();的時(shí)候就會出現(xiàn)數(shù)據(jù)全部清空了。這是因?yàn)槲覀儗魅隺dapter的參數(shù)進(jìn)行了一個(gè)全體賦值,而List<T>參數(shù)中那些未被修改的數(shù)據(jù)也一樣被重新修改(即使數(shù)據(jù)是一樣的,可實(shí)際上對象已經(jīng)發(fā)生了變化)。


2.問題描述:

Listview中adapter的刷新(notifyDataSetChanged())ListView還是沒有任何變化問題.

解決方法:

這種情況一般出現(xiàn)在我們對List<T>的數(shù)據(jù)要進(jìn)行一個(gè)批量的操作的時(shí)候。例如:

for (int i = mPositions.size() - 1; i >= 0; i--) {mPackageInfos.remove((int)mPositions.get(i));mAdapter.notifyDataSetChanged();}
大家可以看到我這邊是從后往前進(jìn)行remove的,這是為了防止先remove了前面的,整個(gè)List<T>向前推了一個(gè)單位,這樣勢必會出現(xiàn)錯(cuò)位。倒序刪除是一種比較普遍的刪除算法。

還有一件事情需要注意:t.remove(positicaion)這樣的操作中的positication是int型的,不能是Integer這種類型的。


3.問題描述:

EditText獲得焦點(diǎn)時(shí),擠壓屏幕問題.

當(dāng)我們點(diǎn)擊某一Activity中的EditText時(shí),我們的某些控件會被擠壓。如果你不是使用比例來控制布局,那么你的運(yùn)氣很好,可能是看不到控件被擠壓。一般來說如果你的一些控件是用的百分比來控制,那么你的控件很有可能就會出現(xiàn)被擠壓得很扁。

解決方法:

你的Manifest.xml文件可以這樣來寫:

<activity android:name="com.xxxx.xxxActivity"android:windowSoftInputMode="adjustPan" />


4.問題描述:

對Eclipse中使用4個(gè)空格來替換一個(gè)Tab鍵的設(shè)置方法.

解決方法:

第一步:

點(diǎn)擊 window->preference,依次選擇 General->Editors->Text Editors,選中右側(cè)的?insert space for tabs。保存

第二步:

1. Window --> Java --> Code Style --> Formatter --> 選擇右側(cè)的Edit -->?

2. 輸入自定義的Profile name

3. 在下方的Tab policy的右側(cè)的下拉列表中選擇Spaces only

4. 輸入Indentation size和Tab size的大小均為4

5. 點(diǎn)擊OK

6. 重啟Eclipse


5.問題描述:

在控制臺啟動和關(guān)閉ADB服務(wù).

解決方法:

開啟:adb start-server

關(guān)閉:adb kill-server

一般來說,我們必須先在控制臺輸入關(guān)閉服務(wù)再輸入開啟服務(wù)。是為了避免之前內(nèi)存中殘留的adb服務(wù)干擾。


6.問題描述:

將兩個(gè)一位或兩位數(shù)顯示成00:00格式.

解決方法:

String.format("%02d", hour) + ":" + String.format("%02d", minute);


7. 問題描述:

如何控制橫豎屏切換

通過在AndroidManifest.xml中設(shè)置activity中的android:screenOrientation屬性值來實(shí)現(xiàn).
android:screenOrientation屬性,有以下參數(shù)可選:
"unspecified":默認(rèn)值 由系統(tǒng)來判斷顯示方向.判定的策略是和設(shè)備相關(guān)的,所以不同的設(shè)備會有不同的顯示方向.
"landscape":橫屏顯示
"portrait":豎屏顯示
"user":用戶當(dāng)前首選的方向
"behind":和該Activity下面的那個(gè)Activity的方向一致(在Activity堆棧中的)
"sensor":由物理的感應(yīng)器來決定。如果用戶旋轉(zhuǎn)設(shè)備這屏幕會橫豎屏切換。
"nosensor":忽略物理感應(yīng)器,這樣就不會隨著用戶旋轉(zhuǎn)設(shè)備而更改了("unspecified"設(shè)置除外).


示例 — AndroidManifest.xml中實(shí)現(xiàn):

android:screenOrientation="portrait" 示例 —?Java代碼實(shí)現(xiàn):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);


8.問題描述:

Java/Android中截取從a到b的子字符串

String subString = str.substring(a, b);


9.問題描述:

SQLite中多級ORDER BY的使用.

SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;


10.問題描述:

判斷當(dāng)前是否為Wi-Fi狀態(tài)

解決方案:

public static boolean isWifiNetwork(Context context) {boolean isWifi = false;Context getContext = context.getApplicationContext(); ConnectivityManager connectivity = (ConnectivityManager) getContext.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo[] info = null;if (connectivity != null) {info = connectivity.getAllNetworkInfo();if (info != null) {for (int i = 0; i < info.length; i++) {if (info[i].getTypeName().equals("WIFI") && info[i].isConnected()) {isWifi = true;break;}}}}getContext = null;connectivity = null;info = null;return isWifi;}

11.問題描述:

JNI開發(fā)時(shí),Unresolved inclusion

我在.c和.h文件中使用#include <jni.h>時(shí),出現(xiàn)了Unresolved inclusion: <jni.h>的報(bào)錯(cuò)信息。 解決方案: 原因是在eclipse編輯環(huán)境中沒有找到對應(yīng)的include中的文件。解決方法是將包含該文件的include目錄作為新的linked folder加入工程中。具體方法如下:
1. 右擊工程->New->Folder
2. 對話框中點(diǎn)擊Advanced
3. 選擇Link to alternate location (Linked Folder),選擇需要的include目錄
4. Finish后刷新工程,問題解決。


12.問題描述:

Android寫文件,換行

注意,這里說的不是在TextView上顯示的文本信息,而是在向文本文件中寫數(shù)據(jù)時(shí)的換行。這里使用的是"\r\n",如下:

String str = "ABC"; str += "\r\n";

13.問題描述:

動態(tài)保持當(dāng)前屏幕的橫豎屏狀態(tài)

? ? 這里不同設(shè)置橫豎的地方就在于保持的前提,前提是我們要知道當(dāng)前屏幕是處于哪種狀態(tài)。這種需求一般出現(xiàn)在我們在一個(gè)沒有限制橫豎屏的Activity中進(jìn)行彈框。在彈框的過程中如果我們進(jìn)行橫豎屏切換,那問題就來了。你可以寫一個(gè)小的Demo來觀察一下橫豎屏切換的時(shí)候,當(dāng)前Activity的生命周期,那么答案就不言而喻了。所以我們要先捕獲屏幕狀態(tài),再去設(shè)置當(dāng)前屏幕的相應(yīng)狀態(tài)。關(guān)鍵代碼如下:

int screenState = MainActivity.this.getResources().getConfiguration().orientation;if (screenState == Configuration.ORIENTATION_LANDSCAPE){MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);} else if (screenState ==Configuration.ORIENTATION_PORTRAIT) {MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}

14. 問題描述:

獲得鍵盤高度

? ? 當(dāng)我們要去獲知鍵盤是否被打開,有時(shí)不是直接去用一個(gè)方法獲得鍵盤是否被打開。例如我們可以獲得當(dāng)前鍵盤的高度,如果超過一定值就認(rèn)為被打開了。說到這里,可能你又會說,那如果鍵盤沒有被打開那還怎么獲得鍵盤的高度呢?這里就要再做一次迂回,計(jì)算鍵盤以上控件的高度。因?yàn)槲覀冎喇?dāng)鍵盤打開后,如果我們設(shè)置了當(dāng)前Activity為擠壓屏幕屬性,鍵盤就會把Activity的根Layout進(jìn)行擠壓,高度會變小,不過屏幕的高度不會變。說到這兒,相信大家也都知道該怎么做了吧。下面時(shí)關(guān)鍵代碼:

/*** 用于獲得鍵盤的高度*/ rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {Rect r = new Rect();rootView.getWindowVisibleDisplayFrame(r);int screenHeight = rootView.getRootView().getHeight();int KeyboardHeigth = screenHeight - (r.bottom - r.top);} });


15.問題描述:

獲得平板序列號

如果要用一串唯一標(biāo)識設(shè)備的字符串,在手機(jī)上相信大家首先想到的可能就是IMEI。不過對于一般的手機(jī)來說,這一點(diǎn)恐怕就很難實(shí)現(xiàn)了。因?yàn)橐话銇碚f,平板中不安裝SIM卡,所以平板中是沒有分配IMEI號碼的。當(dāng)然,也有一些平板中就有,華為就是。

解決方案:

public static String getSerialNumber() {returnandroid.os.Build.SERIAL; }


16.問題描述:

替換圖標(biāo)后運(yùn)行程序圖標(biāo)沒有被替換

解決方案:

遇到這種情況一般來說就是你沒有替換掉所有分辨率下的圖標(biāo),這時(shí)只需要重新替換掉所有圖標(biāo)即可。不過今天我也遇到了替換圖標(biāo)失效的問題,我項(xiàng)目中所有分辨率下的圖標(biāo)均已替換,可是還是不行。原來是因?yàn)槲覀兊氖謾C(jī)會有一個(gè)緩存機(jī)制,它保存了我們原來的那個(gè)圖標(biāo),不管你怎么替換肯定都是不行的。現(xiàn)在你要么是等,要么是換一臺機(jī)器試試。


17.問題描述:

動態(tài)限制EditText最長輸入的字符長度

解決方案:

imgSizeEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(3)});


18.問題描述:

動態(tài)設(shè)置EditText光標(biāo)位置

解決方案:

imgNameEditText.setSelection(32); // 設(shè)置光標(biāo)的位置


19.問題描述 :

動態(tài)獲得控件的寬和高

解決方案:

就拿RelativeLayout來說明一下吧

RelativeLayout mShowLayout = (RelativeLayout) findViewById(R.id.main_relative_layout); mShowLayout.measure(0, 0); Toast.makeText(this, "w = " + mShowLayout.getMeasuredWidth() + ", h = " + mShowLayout.getMeasuredHeight(), 0).show();


20.問題描述:

格式化日期,出現(xiàn)未被格式化的內(nèi)容(如:1997-01-01 HH:12:00)

出現(xiàn)上述問題的原因可能是因?yàn)槲覀兪褂孟旅孢@樣的語句來格式化我們的日期文本
textView.setText(DateFormat.format("yyyy-MM-dd HH:mm:ss", System.currentTimeMillis()).toString());
解決方案:
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
textView.setText(sDateFormat.format(new Date(System.currentTimeMillis())));


筆者最新開發(fā)的應(yīng)用連接

http://zhushou.360.cn/detail/index/soft_id/2419729?recrefer=SE_D_%E6%A3%B1%E9%95%9C

http://www.wandoujia.com/apps/com.mastershield.personalstat

總結(jié)

以上是生活随笔為你收集整理的Android细节问题总结(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。