Android 開發(fā)所遇問題

1.?環(huán)境問題

2018-7-25

問題:AVD啟動不了 ——?報x86需要加速程序錯誤 ——?在SDK管理器中重新安裝這個組件出錯 ——?報Hyper-V Hyper-Vx沖突

解決:win10 ——?控制面板 》程序與功能 》啟用或關(guān)閉Windows功能 ——?取消選擇Hyper-V


2. AndroidStudio問題

2021-02-16

問題:對 drawable layout 進行大量替換和修改,編譯出錯:AAPT: error drawable not found

解決:沒有解決了,無論怎么刷新、重啟、修改、刪除新增都不行,只能重新建一個項目,復(fù)制文件。

更新:是界面新版本,drawable xml 不能設(shè)置 tint

2020-9-28

問題:應(yīng)用崩潰后重啟,看不到日志

解決:在Logcat選擇崩潰的包名查看日志,xxx.xxx.xxx 【DEAD】

2018-9-24

問題:Kotlin not configed

解決:項目七轉(zhuǎn)八轉(zhuǎn),一頓瞎操作,最后把kotlin的版本都弄錯了,在項目build.gradle中把kotlin版本改回與gradle相對應(yīng)版本(會有提示)。

2018-9-24

問題:Android Studio?抽風(fēng),?不停報錯:Stub index points to a file without PSI: com.intellij.openapi.fileTypes ... ...?

解決:File》Invalidate Cashes / Restart

2018-7-31

問題:真機測試時,安裝應(yīng)用失敗,卸載了之前版本也沒有

解決:Android studio —— File》Settings》Build》Instant Run ——?取消選擇Enable Instant Run ...

后續(xù)(2018.9.21):發(fā)現(xiàn)?Instant Run?還是挺有用的,打開此功能,將 app》build》intermediates?文件夾刪掉再編譯運行,可以用了

3.?代碼問題

2021-11-04

問題:Android 6.0 之前使用代碼設(shè)置LinearLayout子View 的 margin,有時候會無效

原因:不同版本LinearLayout.generateLayoutParams方法不一樣,新版本會處理參數(shù)是MarginLayoutParams時候的情況。舊版下,會因為此方法沒有處理,導(dǎo)致LinearLayout.addView方法,會因參數(shù)是MarginLayoutParams而不是LinearLayout.LayoutParams時,丟掉margin信息。

解決:addView時確保使用的是LinearLayout.LayoutParams。同理,RelativeLayout也一樣。

2021-05-14

問題:RecyclerView setAdapter 與 adapter.notifyDatasetChanged 幾乎同時執(zhí)行時,顯示異常

解決:只執(zhí)行一個

2021-04-04

問題:給LinearLayout 或者 RecyclerView設(shè)置.9圖之后,子View的位置發(fā)生變化。

原因:可能是個BUG,改變View背景可能會改變view的padding

解決:設(shè)置背景后,重新設(shè)置padding

2020-12-16

問題:RecyclerView的報錯 Inconsistency detected. Invalid view holder adapter positionViewHolder

原因:數(shù)據(jù)list內(nèi)容改變后,沒有及時通知列表內(nèi)容變化。要保證先改變list,后通知,并且在同一線程順序執(zhí)行。

2020-12-14

問題:AlarmManager無法傳遞PendingIntent中的Parcelable類型Extra。設(shè)置了Parcelable的extra之后,不僅這個數(shù)據(jù)丟失,連同一起設(shè)置的其他extra一起丟失。

原因:網(wǎng)絡(luò)上的解釋是系統(tǒng)如果需要修改Intent時,需要重建intent的extra,而系統(tǒng)沒有自定義的類,這個步驟會崩潰,鬧鐘觸發(fā)時只會得到空數(shù)據(jù)。

解決:Anroid N之前還可能用。之后只能設(shè)置基本類型數(shù)據(jù),或者將Parcelable轉(zhuǎn)為基本類型傳遞。

2020-5-4

問題: View先從父View中移除再添加,依然報已有父View的錯誤

原因:View在從父View中移除時,有Translation動畫,還沒有真正從父View中移除??丛创a好像是低版本的BUG,當(dāng)前出現(xiàn)問題的系統(tǒng) Android 7.0

2020-4-5

問題:GridLayout?動態(tài)添加控件不顯示,Android 6.0以上系統(tǒng)測試正常,向下兼容時出現(xiàn)。

原因:引用的是?android.widget.GridLayout

解決:添加依賴:implementation"androidx.gridlayout:gridlayout:1.0.0",并引用?androidx.gridlayout.widget.GridLayout??磥韆ndroid.widget.GridLayout已經(jīng)被拋棄了。但竟然可以在高版本使用,F(xiàn)**K。

2019-4-3

問題:ViewGroup啟用LayoutTransition時,動態(tài)添加這個ViewGroup自己卻有動畫

原因:本以為?LayoutTransition只作用于ViewGroup的子View,但是LayoutTransition類源碼runChangeTransition函數(shù)顯示:如果 mAnimateParentHierarchy?為true,啟用ViewGroup的父ViewGroup的動畫,作用于當(dāng)前ViewGroup。

解決:transition.setAnimateParentHierarchy(false)

2019-2-13

問題:RecyclerView?滾動之后?item?點擊事件失效,表現(xiàn)為點擊兩次或過一會兒點擊生效

原因:RecyclerView?嵌套在CoordinatorLayout中產(chǎn)生此問題,RecyclerView?滾動表面上結(jié)束了,內(nèi)容還處于Fling狀態(tài),不能響應(yīng)點擊。RecyclerView 28.0.0?版本在修復(fù)舊版本問題的時候引入此新?BUG。

解決:禁止直接嵌套。

2018-9-18

問題:自定義TextView初始化時 SingleLine?屬性與?Gravity.Center?混用,導(dǎo)致不繪制

解決:這是TextView的一個Bug,沒辦法,估計Google也不會注意到這個問題上來。

2018-8-10

問題:自定義屬性 obtainStyledAttributes?死活找不到?R.styleable.xxx?但是能找到?R.styleable.xxx_xxx

解決:錯誤提示垃圾了,其實是 attrs.xml?出現(xiàn)了問題。我的問題:

1、有重復(fù)?attr?屬性名稱,將重復(fù)的屬性名稱移動到 declare-styleable?外面,引用時只包含名稱。

2、attr?名稱有一個是 “new”?系統(tǒng)不接受,也不提示錯誤 f*******k?

2018-8-2

問題:?ViewPager使用,PagerAdapter.notifyDataSetChanged()不更新數(shù)據(jù)。

過程:網(wǎng)上回答比較多的是 getItemPosition?return POSITION_NONE,還有其他使用?FragmentPagerAdapter,F(xiàn)ragmentStatePagerAdapter的,復(fù)寫了其他方法的,統(tǒng)統(tǒng)嘗試了在我的工況下沒有效果。

結(jié)果:stackoverflow?上這個問題持續(xù)問了六年,不斷有人回答,討論,結(jié)果仍然不夠明朗。

解決:其實只需要給?ViewPager 重新設(shè)置一次更新數(shù)據(jù)了的?PagerAdapter?即可。這并沒有損失多少性能,重新設(shè)置 adpater?與?return POSITION_NONE?是一個原理,重新生成了2~3個View而已。

2018-7-31

問題:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewGroup.transformMatrixToGlobal(android.graphics.Matrix)' on a null object reference

工況:Activity A?中的 RecyclerView?中的 item?與?Activity B?中的一個View共享,使用共享元素動畫在二者間跳轉(zhuǎn),?為了動畫更柔和沒有閃爍,從?B?返回 A?時先通過 BroadcastReceiver?把數(shù)據(jù)返回來,?更新了 A?中?item,使用了?RecyclerView?的?notifyItemChanged(position:Int),共享元素動畫結(jié)束時報錯。

原因:經(jīng)測試,不同系統(tǒng)版本,不同 RecyclerView?版本(27.1.1?與 26.1.0)表現(xiàn)不一樣,以上問題發(fā)生在使用?notifyItemChanged(position:int)?會重新調(diào)用?onCreateViewHolder?即使?Item?還在可視區(qū),這個調(diào)用導(dǎo)致共享元素發(fā)生變化,不再是同一個View,從而使?B?返回?A?時的動畫找不到原來的?View?報錯。

解決:改調(diào)用?notifyItemChaned(position: Int, payload: Object),payload?傳 0?即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容