activity

ViewModel、LiveData、DataBinding

若如初见. 提交于 2020-02-22 19:47:57
ViewModel ViewModel的引入 如果系统销毁或重新创建界面控制器,则存储在其中的任何临时性界面相关数据都会丢失。例如,应用的某个 Activity 中可能包含用户列表。因配置更改而重新创建 Activity 后,新 Activity 必须重新提取用户列表。对于简单的数据,Activity 可以使用 onSaveInstanceState() 方法从 onCreate() 中的捆绑包恢复其数据,但此方法仅适合可以序列化再反序列化的少量数据,而不适合数量可能较大的数据,如用户列表或位图。 架构组件为界面控制器提供了 ViewModel 辅助程序类,该类负责为界面准备数据。 在配置更改期间会自动保留 ViewModel 对象 ,以便它们存储的数据立即可供下一个 Activity 或 Fragment 实例使用。 实现ViewModel package com.zyb.viewmodeltest; import androidx.lifecycle.ViewModel; public class MyViewModel extends ViewModel { public int num = 0; } 从 Activity 访问该列表,如下所示: package com.zyb.viewmodeltest; import androidx.appcompat.app

Android研究-Android 画图方式[zz]

时光毁灭记忆、已成空白 提交于 2020-02-22 03:51:27
GUIer们应该对Android的GUI实现这有所好奇,肯定也是经过一番搜索的,比如先找TextView这种简单的,draw接口了、onDraw接口了、paint接口了、onPaint接口了,通过这些接口进一步找到发现Drawable的draw接口实际绘制的,接着发现是Canvas接口绘制的,接着发现是jni到了SkCanvas这样的本地接口了,SkCanas原来是skia(类似cairo)这个纯2D少量3D图形引擎的核心类,问题就转移到了skia机制和实现身上了. 本文是一位大牛的文章,介绍了你想知道的Android的图形方面的东西,很全,很系统,地址: http://blog.csdn.net/arm10504/article/details/5483971 Android apk 里面的画图分为2D和3D两种:2D是由 Skia 来实现的,也就是我们在框架图上看到的SGL,SGL也会调用部分 opengl 的内容来实现简单的3D效果;3D部分是由OpenGL|ES实现的,OpenGL|ES是Opengl的嵌入式版本,我们先了解一下Android apk的几种画图方式,然后再来来看一看这一整套的图形体系是怎么建立的。 首先画图都是针对提供给 应用 程序的一块内存填充 数据 , 没去研究过一个Activity是否就对应着底层的一个surface

彻底解决android API 不兼容问题

删除回忆录丶 提交于 2020-02-22 03:34:59
比如高版本API废弃了低版本的API,这样的话,还是用低版本的API开发的话,再低版本下运行,就会照成程序的崩溃,解决方案如下 大致结构: 假设SDK版本开始变化的 SDK版本是 sdkversion if(sdk< sdkversion){ //加载低版本的实现activity的代码 }else{ //加载高版本实现activity的代码 } 上面两个部分打开不同的activity 就可以了,不可以在一个activity写两个版本的代码,那样,在加载到内存的时候,会判断没相关API就会报错! 知道这个问题困扰过大家!总结的希望对大家有帮助! 来源: https://www.cnblogs.com/meiyitian/archive/2011/12/12/2284842.html

尝试用kotlin做一个app(第一天)

纵饮孤独 提交于 2020-02-21 08:14:11
1.先添加一下 anko 库 依赖:implementation "org.jetbrains.anko:anko:$anko_version" 版本:ext.anko_version='0.10.8' 2.新建Activity和Fragment的两个基类,方便以后使用 abstract class BaseActivity: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(getLayoutId()) initData(); onListener(); } abstract fun getLayoutId(): Int;//继承此类必须先实现此方法 protected open fun initData(){ } protected open fun onListener() { } // abstract class BaseFragment:Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) initData() }

android常见内存泄漏

无人久伴 提交于 2020-02-20 09:09:29
1、静态变量 类中定义了静态Activity变量,把当前的Activity赋值给静态变量,如果Activity生命周期结束的时候静态变量没有清空,就会导致内存泄漏。static变量是贯穿整个应用的生命周期,所以被泄漏的Activity就会一直存在于应用的进程中,不会被回收。 private static Activity sActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); sActivity = this; findViewById(R.id.btn_back).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); } } 2、 非静态内部类 创建 静态实例 这里的非静态内部类是Config,创建的静态实例是sConfig 造成内存泄漏的原因是 内部类会隐式持有外部类的引用 ,这里的外部类是NonStaticActivity,然而内部类sConfig又是static静态变量

隐藏软键盘

浪尽此生 提交于 2020-02-19 17:37:22
方法1 // 如果输入法在窗口上已经显示,则隐藏,反之则显示 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 方法2 // 隐藏软键盘 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(rePassword.getWindowToken(), 0); android:windowSoftInputMode="adjustPan|stateVisible" > 显示键盘并且不改变布局 活动的主窗口如何与包含屏幕上的软键盘窗口交互。这个属性的设置将会影响两件事情: 1> 软键盘的状态——是否它是隐藏或显示——当活动( Activity )成为用户关注的焦点。 2> 活动的主窗口调整——是否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口的部分被软键盘覆盖时它的内容的当前焦点是可见的。 它的设置必须是下面列表中的一个值,或一个

Android 使用Intent隐式传递启动Activity

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-19 16:48:50
Intent传送分为显示和隐式传递 显示Intent传递 Intent intent = new Intent(MainActivity. this ,SecondActivity.class); startActivity(intent); 这个非常简单,只需要传入两个相关联上下文。 第一个:MainActivity.this就是指定当前的Activity 第二个:SecondActivity.class就是你要跳转的Activity 是不是非常简单???(前提得要在AndroidManifest进行Activity注册). 隐式Intent传递 隐式传递相对于显示Intent较委婉,不过也非常简单。 在AdnroidManifest.xml文件里 <activity android:name= ".MainActivity" > <intent-filter> <action android:name= "android.intent.action.MAIN" /> <category android:name= "android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name= ".SecondActivity" > <intent-filter> <action

Android Studio3.2在app出现红叉,run报错 Warning: Default Activity not found

喜夏-厌秋 提交于 2020-02-19 07:53:21
Android Studio3.2在app出现红叉,run报错 Warning: Default Activity not found 场景:新建工程的时候没有选择empty activity,而是选择了Add No Activity。 现象:Android Studio3.2在app出现红叉,run报错 Warning: Default Activity not found 解决方案:在AndroidManifest.XML文件中<Activity></activity>标签对中添加内容,即: <activity android:name=".FirstActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>即可解决上述问题。 来源: https://www.cnblogs.com/Wesley00/p/10878598.html

Android的Activity屏幕切换滑动动画

空扰寡人 提交于 2020-02-19 07:33:26
Activity的切换效果使用的是Android的动画效果,Android的动画在官方有相关资料: http://developer.android.com/guide/topics/graphics/animation.html 和 http://developer.android.com/guide/topics/resources/animation-resource.html ,Activity的切换动画实际上是Android的View Animation(视图动画)中的Tween Animation效果,Tween Animation分为4种动画效果,分别是:alpha (透明变化) translate(位置移动) scale(缩放) rotate(旋转), 而左右滑动切换使用的是 translate(位置移动)的效果,在下一篇我们再讨论一下 alpha (透明变化) 、scale(缩放)、 rotate(旋转) 这三种效果,本篇只将 translate(位置移动)。 Translate动画是非常好理解,就是定义一个开始的位置和一个结束位置,定义移动时间,然后就能自动产生移动动画。Android的translate移动方向有 横向(X) 竖向(Y), 左右滑动使用了横向移动效果. 定义一个向上退出的动画和从下面进入的动画定义文件如下: out_to_up.xml

Android自定义的弹窗

放肆的年华 提交于 2020-02-19 03:49:56
package com.microduino.qoobot.view; import android.app.Activity; import android.app.Dialog; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import com.microduino.qoobot.R; /* * :Created by z on 2019/1/16 */ public abstract class BaseDialog { private Dialog dialog; private Activity activity; public BaseDialog(Activity activity,int res){ dialog = new Dialog(activity, R.style.BuildDialog); LayoutInflater inflater = LayoutInflater.from(activity); View view = inflater.inflate(res, null);