安卓开发中遇到的问题(持续更新)

Jectpack组件

Navigation

问题描述:BottomNavigationView控件添加到布局文件中导致预览无法预览视图

问题原因:Material Design 组件库的版本过高。

解决方案:

dependencies {
    implementation 'com.google.android.material:material:1.4.0'
}

NavDirections

问题描述:在使用Navigation组件进行导航时,通过NavDirection将数据传递给另一个界面。但是在构建项目时,使用Safe Args插件自动生成的Args类报错,无法获取传递的数据。

问题原因:Safe Args插件版本和Navigation组件版本不一致

解决方案:

//项目级别下的build.gradle
buildscript {
    ext{
        navigation_version = '2.5.1'
    }
    dependencies {
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:${navigation_version}"
    }
}

//应用级别下的build.gradle
dependencies {
    //navigation
    implementation "androidx.navigation:navigation-fragment-ktx:${navigation_version}"
    implementation "androidx.navigation:navigation-ui-ktx:${navigation_version}"
}

开源项目(github)

开源组件

ShimmerRecyclerViewX

问题描述:gradle中导入依赖失败

问题原因:可能是需要给gradle添加代理

解决方案:

这个需要添加到setting.gradle中的dependencyResolutionManagement里的repositories

repositories {
    maven { url "https://jitpack.io" }
}

这个添加到build.gradle中

implementation 'com.github.mike14u:shimmer-recyclerview-x:1.0.4'

弃用函数

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")
}

安卓资源中单复数Plurals问题

问题描述:plurals在中文设备上无法起作用

问题原因:应用程序本地化。如果在应用程序中使用英语作为区域设置,则这些代码应该有效。否则可能不起作用。中文没有单复数之分

解决方案:无

使用方法:

Android 中的数量字符串。通过声明 plurals 资源,您可以根据具体数量指定要使用的不同字符串资源,例如采用单数或复数形式。

  1. strings.xml 文件中添加一个 cupcakes 复数资源。
<plurals name="cupcakes">
    <item quantity="one">%d cupcake</item>
    <item quantity="other">%d cupcakes</item>
</plurals>

在单数情况 (quantity="one") 下,将使用单数形式的字符串。在所有其他情况 (quantity="other") 下,将使用复数形式的字符串。请注意,与需要字符串参数的 %s 不同,%d 需要的是整数参数,您将在格式化字符串时传入该整数参数。

在您的 Kotlin 代码中,调用

getQuantityString(R.plurals.cupcakes, 1, 1)将返回字符串1 cupcake
getQuantityString(R.plurals.cupcakes, 6, 6)将返回字符串6 cupcakes
getQuantityString(R.plurals.cupcakes, 0, 0)将返回字符串0 cupcakes

注意:调用 getQuantityString() 时,您需要传入两次数量,因为第一个数量参数将用于选择正确的复数形式字符串。第二个数量参数用于实际字符串资源的 %d 占位符。

Room版本问题

问题描述:

room版本在4.0以下,如果在dao接口中的方法前加suspend修饰符出现报错错误: Type of the parameter must be a class annotated with @Entity or a collection/array of it.

解决方案:

  1. room版本修改到4.0以上
  2. 去掉suspend修饰符,但是耗时操作依然要放在协程中执行,使用IO调度程序
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容