todo-mvp Google官方Demo 心得体会

Google提供的Demo,地址如下:
https://github.com/googlesamples/android-architecture/tree/todo-mvp/

一.关闭AndroidMainfest.xml中黄色波浪线的警告

在这里插入图片描述
官方原因:要使Google能够抓取您的应用内容并允许用户从搜索结果中进入您的应用,您必须为manifest中的相关活动添加intent filters。它们允许深入链接到您的任何活动中的内容。例如,用户可以点击深层链接以查看购物应用中的页面,该页面描述用户正在搜索的产品。

解决方法1:
在AndroidManifest.xml文件中,至少一个Activity的intent-filter中添加
<action android:name="android.intent.action.VIEW" />
在这里插入图片描述
解决方法2:
在app的build.gradle中添加如下代码:

    lintOptions{
        disable 'GoogleAppIndexingWarning'
    }
二.Activity回退时返回到逻辑父类Activity
有两种方法。

第一种:
在这里插入图片描述
第二种:
在这里插入图片描述
使用这种方法回退时有限制条件:
1.点击手机返回键回退时是没有效果的,必须使用ActionBar上的返回按钮才可以。
2.Activity必须有ActionBar,因为没有ActionBar的Activity必然没有返回按钮,自然不可以进行回退。
3.回退到的Activity必须已经创建,不能回退到未创建的Activity上。

在使用ActionBar的返回按钮进行回退时,其逻辑如下:

//MainActivity是回退到的Activity
MainActivity.onDestroy()
MainActivity.onCreate(null)
MainActivity.onStart()

可以看到的是,使用这种方法进行回退时,会先销毁原来的MainActivity,然后重新创建一个。
解决方法为设置MainActivity的属性,android:launchMode=singleTop

三.setSupportActionBar()时报错

在Activity中,使用setSupportActionBar()时报错,如图所示。在这里插入图片描述
原因:设置Toolbar时,如果系统检测到有ActionBar,则会报错。
解决方法:去掉ActionBar即可,加上下面这几行代码:
在这里插入图片描述

四.在Fragment中创建ActionBar菜单

解决方法:在Fragment的onCreateView中加上如下方法。
在这里插入图片描述

五.setDisplayHomeAsUpEnabled()与setDisplayShowHomeEnabled()区别
setDisplayHomeAsUpEnabled(true)    // 给左上角图标的左边加上一个返回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP
setDisplayShowHomeEnabled(true)   //选择左上角图标是否显示,如果设成false,则没有程序图标,仅仅就个标题,否则,显示应用程序图标,对应id为android.R.id.home,对应ActionBar.DISPLAY_SHOW_HOME
六.VisibleForTesting

@VisibleForTesting注解一个类,方法,变量,表示它有更宽松的可见性,使代码可以被测试。也就说为了测试方便,提高了可见性。

七.Mainfest merger failed

在这里插入图片描述
按照建议添加tools:replace="android:appComponentFactory"后还是报错,如下所示:
在这里插入图片描述
可以看到的是错误主要是在Manifest中,所以我们在Google提供的Gradle工具中找到这个processDebugManifest。·侧边栏Gradle -app-Tasks-other-processDebugManifest。这个可以帮助我们查看错误信息,并给出解决方法。
在这里插入图片描述
想查看更多的信息,可以输入gradlew processDebugManifest --stacktrace
在这里插入图片描述
在AndroidManifest的application节点下输入这一行。

android:appComponentFactory="ToDo"

但是,输入这几行之后,项目还是会报错,本质上是support包与androidx包无法共存。所以我们需要将引用的support包转成androidx包。
首先,在gradle.properties下输入这两行代码

android.enableJetifier=true
android.useAndroidX=true

然后,选择AndroidStudio中的Refactor标题栏,点击下面的Mrigrate to AndroidX,选择将项目转换为AndroidX项目,同时会选择将当前项目保存为压缩包。
在这里插入图片描述
最后,在Activity类,Fragment等类中将引用的support类包删掉,换成androidx包即可。在xml文件中,widget也要换成androidx包的,否则运行中会报错。同时,刚开始在AndoridManifest.xml中添加的几行代码是无效的,删掉。

八.Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide room.schemaLocation annotation processor argument OR set exportSchema to false.

exportSachma = false;

@Database(entities = { YourEntity.class }, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
   ...
}
九.屏幕旋转后,Activity之间使用的Intent传递的数据

在ActivityA向ActivityB传递数据后,在ActivityB界面,屏幕旋转,ActivityB会重启,重新调用生命周期,可以再次接受到ActivityA传递来的数据。

十.确定按钮被输入法挡住

在这里插入图片描述
类似于这种情况,先输入标题,然后再输入内容。但是在输入内容时,输入法栏出现,挡住了确定的按钮,为了点击确定,需要关闭输入法,然后再点击确定,体验极其差。在这种情况下,可以给布局的外围加一个ScrollView,当输入法出现时,布局向上滑动,确定按钮也跑到了上面,解决了确定按钮被输入法挡住的问题。效果如下图所示。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值