Jectpack組件
Navigation
問題描述:BottomNavigationView控件添加到布局文件中導(dǎo)致預(yù)覽無法預(yù)覽視圖
問題原因:Material Design 組件庫的版本過高。
解決方案:
dependencies {
implementation 'com.google.android.material:material:1.4.0'
}
NavDirections
問題描述:在使用Navigation組件進行導(dǎo)航時,通過NavDirection將數(shù)據(jù)傳遞給另一個界面。但是在構(gòu)建項目時,使用Safe Args插件自動生成的Args類報錯,無法獲取傳遞的數(shù)據(jù)。
問題原因:Safe Args插件版本和Navigation組件版本不一致
解決方案:
//項目級別下的build.gradle
buildscript {
ext{
navigation_version = '2.5.1'
}
dependencies {
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:${navigation_version}"
}
}
//應(yīng)用級別下的build.gradle
dependencies {
//navigation
implementation "androidx.navigation:navigation-fragment-ktx:${navigation_version}"
implementation "androidx.navigation:navigation-ui-ktx:${navigation_version}"
}
開源項目(github)
開源組件
ShimmerRecyclerViewX
問題描述:gradle中導(dǎo)入依賴失敗
問題原因:可能是需要給gradle添加代理
解決方案:
這個需要添加到setting.gradle中的dependencyResolutionManagement里的repositories
repositories {
maven { url "https://jitpack.io" }
}
這個添加到build.gradle中
implementation 'com.github.mike14u:shimmer-recyclerview-x:1.0.4'
棄用函數(shù)
setHasOptionMenu
- Activity
/**
* Using the addMenuProvider() API directly in your Activity
**/
class ExampleActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Add menu items without overriding methods in the Activity
addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
// Add menu items here
menuInflater.inflate(R.menu.example_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
// Handle the menu selection
return true
}
})
}
}
- Fragment
/**
* Using the addMenuProvider() API in a Fragment
**/
class ExampleFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// The usage of an interface lets you inject your own implementation
val menuHost: MenuHost = requireActivity()
// Add menu items without using the Fragment Menu APIs
// Note how we can tie the MenuProvider to the viewLifecycleOwner
// and an optional Lifecycle.State (here, RESUMED) to indicate when
// the menu should be visible
menuHost.addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
// Add menu items here
menuInflater.inflate(R.menu.example_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
// Handle the menu selection
return true
}
}, viewLifecycleOwner, Lifecycle.State.RESUMED)
}
build.gradle(app)
dependencies {
val activity_version = "1.5.1"
// Kotlin
implementation("androidx.activity:activity-ktx:$activity_version")
}
安卓資源中單復(fù)數(shù)Plurals問題
問題描述:plurals在中文設(shè)備上無法起作用
問題原因:應(yīng)用程序本地化喂链。如果在應(yīng)用程序中使用英語作為區(qū)域設(shè)置,則這些代碼應(yīng)該有效妥泉。否則可能不起作用椭微。中文沒有單復(fù)數(shù)之分
解決方案:無
使用方法:
Android 中的數(shù)量字符串。通過聲明 plurals
資源,您可以根據(jù)具體數(shù)量指定要使用的不同字符串資源,例如采用單數(shù)或復(fù)數(shù)形式叫搁。
- 在
strings.xml
文件中添加一個cupcakes
復(fù)數(shù)資源。
<plurals name="cupcakes">
<item quantity="one">%d cupcake</item>
<item quantity="other">%d cupcakes</item>
</plurals>
在單數(shù)情況 (quantity="one"
) 下瓢剿,將使用單數(shù)形式的字符串。在所有其他情況 (quantity="other"
) 下悠轩,將使用復(fù)數(shù)形式的字符串间狂。請注意,與需要字符串參數(shù)的 %s
不同火架,%d
需要的是整數(shù)參數(shù)鉴象,您將在格式化字符串時傳入該整數(shù)參數(shù)。
在您的 Kotlin 代碼中何鸡,調(diào)用
getQuantityString(R.plurals.cupcakes, 1, 1)將返回字符串
1 cupcake
getQuantityString(R.plurals.cupcakes, 6, 6)將返回字符串
6 cupcakes
getQuantityString(R.plurals.cupcakes, 0, 0)將返回字符串
0 cupcakes
注意:調(diào)用
getQuantityString()
時纺弊,您需要傳入兩次數(shù)量,因為第一個數(shù)量參數(shù)將用于選擇正確的復(fù)數(shù)形式字符串骡男。第二個數(shù)量參數(shù)用于實際字符串資源的%d
占位符淆游。
Room版本問題
問題描述:
room版本在4.0以下,如果在dao接口中的方法前加suspend修飾符出現(xiàn)報錯錯誤: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
解決方案:
- room版本修改到4.0以上
- 去掉suspend修飾符,但是耗時操作依然要放在協(xié)程中執(zhí)行犹菱,使用IO調(diào)度程序