全部 文章 问答 分享 共找到15个相关内容
【完结】Android开发Jeptack系列之Navigation
先学习完Jetpack我们从MVVM开始讲起-ViewModel LiveData Lifecycle再学习此课程 课程地址 课程地址 课程下载地址 课程下载 在线学习地址 B站: Android
androidx怎么转android,原来是这样啊。
1193155718132310016https://developer.android.google.cn/jetpack/androidxhttps://developer.android.google.cn/jetpack/
3、Android开发Jetpack-Databinding事件处理
Android开发Jetpack-Databinding事件处理 事件处理主要有两种 一种是方法引用,另外一种则是监听绑定 官方的说法叫做:Method references 和 Listener
Jetpack我们先从MVVM开始讲起
Jetpack我们先从MVVM开始讲起 在开始Jetpack相关的课程之前,我们先从MVVM开始讲起。google推荐我们的应用架构是MVVM。 原连接地址:应用架构指南 为了达到实现这个架构,我们
7、Android开发Jetpack-DatabindingUI绑定类
绑定类 同学们可以理解为每一个xml可以对应生成一个binding类。比如说你的Activity里的布局 ,比如说列表的item,这些都可以生成对应的binding类。 前面的话,我们的绑定类都是自动生成的,比如说activity_main.xml的对应绑定类是ActivityMainBinding,也就是默认情况下以布局的名称改成驼峰命名法+Binding 修改绑定类的的名称 这个难搞吗? 不难搞,在data标签上,修改class属性即可,比如说我们的main_activity.xml布局里 点击Build->Make Project一下,重新构建,就会生成MainBinding的类了 这个类生成在什么目录呢? 获取到绑定类 两种方式,一种是通过DataBindingUtil来绑定,一种是通过Binding类的静态方法来获取到绑定类实例 手动方式来绑定 val inflate = ActivityMainBinding.inflate(layoutInflater) setContentView(inflate.root) 这样子,返回的是ActivityMainBinding,并且,可以拿到View,设置到Activity里去。 当然啦,这个inflate也有重载的方法,其实跟我们以前使用的LayoutInflater差不多。 val binding = ActivityMainBinding.inflate(getLayoutInflater(), viewGroup, false) 最后一个参数true或者false的意思同学们应该知道的吧,不知道的话去看一下自定义控件的课程。 Android开发自定义控件系列课程 可以直接bind到View上 val binding = ActivityMainBinding.bind(viewRoot) 使用DataBindingUtil来绑定 //把布局交给DataBindingUtil val activityMainBinding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main) 我们在Activity里两种方法都可以,我们在RecyclerView的适配器,或者其他条目类的布局,可以通过Binding类的静态方法来获取到实例对象。 绑定类的结构 前面我们已经告诉大家绑定类在哪个目录下了! 它继承自ViewDataBinding 并且是一个抽象类:public abstract class MainBinding extends ViewDataBinding 那么它的实现类是谁呢? public class MainBindingImpl extends MainBinding 在哪个目录下呢? 路径,同学们就看看上面这个图吧。 具体的代码同学们可以去看看,不难。
Jetpack的 navigation做页面跳转,FragmentPagerAdapter 页面数据丢失
tabbar 是 ViewPager + FragmentPagerAdapter 做的,然后用的 navigation 做 Fragment页面跳转,一进 APP,tabbar 主页面的数据都是有的,当点击跳转到子Fragment页面的然后再返回到 tabbar 主页面的时候,页面的数据都不显示了 代码页面分为 MainActivity MainFragment (主页) HomeFragment (tabbar 1页面) DemoFragment (tabbar 2页面) MineFragment (tabbar 3页面) DemoSlideMenuFragment (子页面) 页面逻辑:MainActivity 里面有一个NavHostFragment 加入了 MainFragment 主页MainFragment 里面 ViewPager + FragmentPagerAdapter 做的 tabbar,HomeFragment、DemoFragment、MineFragment分页是三个切换的页面; 当我从 DemoFragment 列表点击一个菜单进入到 DemoSlideMenuFragment子页面,然后再返回来,HomeFragment、DemoFragment、MineFragment 三个页面的数据丢失了,内容都不显示了 操作步骤图 进入 app : 随便点击 菜单例如 wowtabbar 进入到子页面: 然后物理键返回 就发现数据都不见了... 代码内容较多 方便可以移步我 github 上看下 https://github.com/Woshiajuana/AndroidDemo/blob/master/WowCool/app/src/main/java/com/owulia/wowcool/fragment/MainFragment.kt 麻烦大家帮忙看下,感激不尽...
Jetpack-Lifecycle
Jetpack-Lifecycle 相关课程: Jetpack我们从MVVM开始讲起 官方文档地址: 使用生命周期感知型组件处理生命周期 LifecycleOwner public
5、Android开发Jetpack-Databinding数据更新->UI更新
数据更新->UI更新 以前我们刷新数据,去服务器获取新的数据,然后数据回来,接着重新设置数据,更新UI。那使用Databinding还需要那样更新UI吗? 当然不需要咯! 通过使用实现Observable的数据,当数据更新的时候,自动更新UI。 监听字段变化更新 常用的Observable ObservableBoolean ObservableByte ObservableChar ObservableShort ObservableInt ObservableLong ObservableFloat ObservableDouble ObservableParcelable ObservableArrayMap ObservableArrayList 比如说我们有一个User,里面有name,age。 我们可以这么写 布局
从Activity中管理的fragment使用share element跳转到另一个fragment不起作用。
按钮。然后跑起来没得效果,所以我就想是不是我共享的元素太复杂了…然后我没有使用jetpack的Navigation,就没有跟着康师傅代码走,所以我从这个网站里找了案例来试试看… https://
6、Android开发Jetpack-DatabindingUI更新->数据更新
UI更新->数据更新 前面我们是数据更新了,UI跟着更新,接下来我们是UI更新,数据跟着更新。这跟我们前面学习到的Vue.js是不是很像呀,不过我们需要做一些处理。当我们输入框变化的时候,当我们数字选择器内容改变的时候,单选框状态改变的时候,我们的数据也要跟着变化了。 应用场景,比如说我们在交易股票的时候,你输入数量,会动态地计算你的成交以后的钱是多少。 使用传统的做法,我们得监听输入股票数量的输入框的内容变化,然后再进行计算,设置到最终成交金额的控件上。 如果使用DataBinding,这个怎么做呢? UI布局 Activity代码 class TwoWayBindingActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val contentView = DataBindingUtil.setContentView( this, R.layout.activity_tow_way_binding ) val stock = ObservableStock() contentView.stock = stock stock.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() { override fun onPropertyChanged(sender: Observable?, propertyId: Int) { if (sender is ObservableStock) { sender.totalPrise = sender.sellCount * sender.currentPrise } } }) } } 相关的Bean类 class ObservableStock : BaseObservable() { var sellCount: Int = 0 set(value) { if (value != field) { field = value notifyChange() } } var currentPrise: Float = 11.0f var totalPrise: Float = 0.0f } 转换器,EditText只接受String,所以我们需要一个转换器,来把String转成int类型,把int类型转成String类型 object Converter { @InverseMethod("string2Int") @JvmStatic fun int2String( value: Int ): String { return value.toString() } @JvmStatic fun string2Int(value: String): Int { if (value.isEmpty()) { return 0 } return value.toInt() } } 运行结果:
2、Android开发Jetpack-Databinding布局和绑定表达式
Android开发Jetpack-Databinding布局和绑定表达式 在布局中,我们可以通过@{}来绑定我们的控件与数据,我们看看在这个坑里我们可以做些什么东西呢? 常用运算符 在这里面,可以
1、Android开发Jetpack-Databinding基本使用
Android开发Jetpack-Databinding基本使用 官方文档地址:https://developer.android.com/topic/libraries/data-binding
4、Android开发Jetpack-Databinding-import,variables,and includes
import,variables,and includes 导入[类],变量,包含(引入[布局]) import 我们一般用于导入类,比如说前面我们导入UserInfo,导入List类,而java.lang.*是默认导入的。 variables,变量的意思,也就是我们的数据bean类 include,包含,引入另外一个布局,子布局。达到某些布局可共用,减少重复代码。 import 官方的例子是这样 使用的时候就可以用值View里的常量了 别名 如果我们导入两个同名的类,不同包名嘛。 这个时候 我们可以通过起别名的方式来使用。 比如说,两个都是View 使用可以通过别名来使用 Variables Variables是变量的意思,你可以引入多个变量,这些在前面的代码里已经显示过了。 比如说: Includes 使用场景,当我们当前这个xml布局include另外一个布局时,比如说: 这样子,它包含了一个子布局,Include的方式添加进来 所包含的内容是这样子的 Activity的代码 class IncludeActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val includeBinding = DataBindingUtil.setContentView(this, R.layout.activity_include) includeBinding.user = User("TrillGates", 30, Gender.MALE) } } 运行结果
Android Jetpack 之 Navigation
Android Jetpack 之 Navigation 为什么要从这个开始呢? 简单呀!! 更重要的是 无论您如何构建应用界面(使用 Fragment、Activity 还是其他组件),都要为应用
Google's Maven Repository
Google's Maven Repository 我找个时间扒下来吧 原地址: 需要使用google浏览器打开 Google's Maven Repository 扒过程 查看源码: /** * The prefix URL of GMaven. * @private @const {string} */ var MAVEN_BASE_URL = 'https://dl.google.com/dl/android/maven2/'; 关键代码: MAVEN_BASE_URL + 'master-index.xml' 得到第一个路径: https://dl.google.com/dl/android/maven2/master-index.xml 这样子,就下载到了 这样一个文件了 再看源码: MAVEN_BASE_URL + groupId.replace(/\./g, '/') + '/group-index.xml'; groupId就是上面的内容了,去掉尖括号和斜杠以后,就可以获取到里面的内容。接着,把点替换成斜杠,比如说: https://dl.google.com/dl/android/maven2/androidx/room/group-index.xml 这样子就扒到它的版本了 于是乎,我就想写个程序,让其他浏览器同学也能查扯到。 写上此篇文章以记之。
  • 1