节选自:FragmentTransaction与addToBackStack与popBackStack
addToBackStack其实针对的是fragmentTransaction。而非是具体的fragment。
节选自:FragmentTransaction与addToBackStack与popBackStack
addToBackStack其实针对的是fragmentTransaction。而非是具体的fragment。
节选自:关于Fragment的一些使用心得-跳转和返回栈实战浅析
先说fragment之间的跳转吧!
我的项目中首先是一个activity,在该活动中添加了一个fragmentA,然后需要从fragmentA跳转到fragmentB,那么我的实现方法如下:
// 设置标题右侧文字及单击事件监听
activity.setTitleRight("添加", new View.OnClickListener() {
@Override
public void onClick(View v) {
AddPlanFragment fragment = new AddPlanFragment();// 创建AddPlanFragment对象
showFragment(PlanListFragment.this, fragment);// 跳转添加计划界面
}
});
/**
* 碎片之间的跳转
*
* @param fragment_current 当前fragment
* @param fragment_next 跳转后显示的fragment
*/
private void showFragment(Fragment fragment_current, Fragment fragment_next) {
// 获取FragmentTransaction对象
FragmentTransaction transaction = ((WorkPlanActivity) context)
.getSupportFragmentManager().beginTransaction();
if (fragment_next.isAdded()) {
// 如果fragment_next已经添加过了,那么直接隐藏fragment_current,显示fragment_next
transaction
.hide(fragment_current)
.show(fragment_next)
.addToBackStack(null)// 加入返回栈,点击回退键会返回上一个fragment
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)// 设置转换动画
.commitAllowingStateLoss();// 提交事务
} else {
// 如果fragment_next还没有添加,那么用add方法添加该碎片
transaction
.hide(fragment_current)// 隐藏fragment_current
.add(R.id.frameLayout_workPlan, fragment_next)
.addToBackStack(null)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commitAllowingStateLoss();
}
}
上面的代码简单来说就是fragmentA中顶部右侧的标题添加单击事件监听,用以跳转到fragmentB。方法中我加了关键的注释,大家应该能理解。
下面就来说说返回栈吧! 继续阅读关于Fragment的一些使用心得-跳转和返回栈实战浅析
相信很多同学都会有这样的感受,前三天刚刚复习的知识点,今天问的时候怎么就讲不出个所以然了呢?
本文的目的就是致力于帮助大家尽可能的建立Android知识体系,希望大家会喜欢~
考虑到上传完的脑图都被压缩过,高清脑图下载地址:
覆盖的知识点有Android、Java、Kotlin、Jvm、网络和设计模式。
正在求职的中高级Android开发
和大部分人一样,我在复习完第一遍Android知识的情况下,看到相关的知识回答的仍然不能够令自己满意。
在第二遍系统复习的时候,我着重记住每个知识点的关键字,根据这些关键字拼凑出大概的知识点,最后看到每个知识点的时候,就知道大概会问哪些内容,达到这种境界以后,你就可以从容的面对每次面试了。
简单的做法就是为每个知识点建立脑图,尽可能把自己想到的关键点罗列出来,也就是下面每个章节前面的脑图。
除此以外,我还为大家提供了可能会问到的面试题。
转载自:NestedScrollView嵌套RecyclerView并且顶部嵌套其他view时 打开页面不会滑到顶部
//在NestedScrollView的第一的子布局中加入 android:focusable="true" android:focusableInTouchMode="true"
节选自:浅析onWindowsFocusChanged()方法
从字面上来讲,onWindowsFocusChanged()方法是指当窗口焦点变化的时候;从意义来说,onWindowsFocusChanged()就是指当前的Activity的Windows(窗口)获取或者失去焦点时这个方法就会被调用,并且当回调这个方法时,Activity是完全可见的。
在Activity生命周期中,onStart(), onResume(), onCreate()都不是布局visible的时间点,真正的visible时间点是onWindowFocusChanged()函数被执行时。从onWindowFocusChanged()被执行起,用户可以与应用进行交互了,换句话说,如果你想要在Activity加载后做些操作,可以在这个方法里调用而这之前,对用户的操作需要做一点限制。
根据介绍可以了解,onWindowFocusChanged()使用于以下等情景:
因此其可以有如下作用:
转载自:如何实现TextureView或者SurfaceView 预览框为圆角
项目中,视频预览界面框为圆角;但发现是使用的Renderer渲染的方法进行的,的确可以有圆角效果。
但有个问题是:我的视频源与要显示视频的预览框的长宽比率不同,预览框需要满屏看到视频源,如果不做处理,视频源只能通过压缩来显示。造成了视频的变形,如果不拉伸处理,那么就进行裁剪处理,需要对视频进行Matrix操作,如移动,伸缩处理。进行这些处理后,渲染的圆角效果就不再出现了。所以通过Renderer来进行圆角效果,不但复杂而且并不可靠。
通过网上的搜索可以找到Android5.0后,一个类ViewOutlineProvider;基于View自身的setClipToOutline(boolean clipToOutline)和setOutlineProvider(ViewOutlineProvider provider)方法实现了该需求。
import android.graphics.Outline;
import android.graphics.Rect;
import android.view.View;
import android.view.ViewOutlineProvider;
public class TextureVideoViewOutlineProvider extends ViewOutlineProvider {
private float mRadius;
public TextureVideoViewOutlineProvider(float radius) {
this.mRadius = radius;
}
@Override
public void getOutline(View view, Outline outline) {
Rect rect = new Rect();
view.getGlobalVisibleRect(rect);
int leftMargin = 0;
int topMargin = 0;
Rect selfRect = new Rect(leftMargin, topMargin,
rect.right - rect.left - leftMargin, rect.bottom - rect.top - topMargin);
outline.setRoundRect(selfRect, mRadius);
}
}
mView.setOutlineProvider(new TextureVideoViewOutlineProvider(radius)); mView.setClipToOutline(true);
任何View都可通过此方法达到圆角效果。
节选自:Android自定义拍照实现
/**
* 注释:拍照并保存图片到相册
* 时间:2019/3/1 0001 15:37
* 作者:郭翰林
*/
private void takePhoto() {
isTakePhoto = true;
//调用相机拍照
mCamera.takePicture(null, null, null, (data, camera1) -> {
//视图动画
mPhotoLayout.setVisibility(View.GONE);
mConfirmLayout.setVisibility(View.VISIBLE);
AnimSpring.getInstance(mConfirmLayout).startRotateAnim(120, 360);
imageData = data;
//停止预览
mCamera.stopPreview();
});
}
adb shell input keyevent <keycode> 命令,不同的 keycode 能实现不同的功能。
| keycode | 含义 |
|---|---|
| 3 | HOME 键 |
| 4 | 返回键 |
| 187 | 切换应用 |