由于这个新的 ViewModelProvider api,我很困惑(不推荐使用 ViewModelProviders)
与新变化一样,也有新的构造函数(源代码)。
public ViewModelProvider(@NonNull ViewModelStoreOwner owner) {
this(owner.getViewModelStore(), owner instanceof HasDefaultViewModelProviderFactory
? ((HasDefaultViewModelProviderFactory) owner).getDefaultViewModelProviderFactory()
: NewInstanceFactory.getInstance());
}
Run Code Online (Sandbox Code Playgroud)
public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) {
this(owner.getViewModelStore(), factory);
}
Run Code Online (Sandbox Code Playgroud)
public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) {
mFactory = factory;
mViewModelStore = store;
}
Run Code Online (Sandbox Code Playgroud)
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"
Run Code Online (Sandbox Code Playgroud)
所以这些构造函数的 require ViewModelStore
和viewModelStoreOwner
.
@param store {@code ViewModelStore} 将存储 ViewModel 的位置。
@param owner 一个 {@code ViewModelStoreOwner},其 {@link ViewModelStore} 将用于保留 {@code ViewModels}
任何人都可以定义它们以及如何使用它们以及它们对我们开发人员的真正意义吗?
ViewModelStoreOwner==activity/fragment 是什么?
android android-fragments android-activity android-viewmodel
我不确定是否可以像这样将主分支(或任何其他分支)与当前功能分支进行比较GIT
。
我想要两个分支(主分支和功能分支)之间的差异,以便我可以在合并之前比较差异。我发现 Git UI 不太用户友好。就像在 AS 中一样,我可以遍历代码并在那里更改它。
我找到了一个选项,我可以将任何分支与我当前的本地分支进行比较(这对我来说似乎是一个解决方案,但是当我使用它时,我感到非常困惑)。
Compare with current
AS 的功能将两个分支与特定的选定提交进行比较。
虽然我需要的是比较两者的最新版本。(功能分支的头和主的头)就像我们在 Git 的合并请求中得到的一样。
PS-我想选择所有提交来获得整个差异,但它给出了一个非常不同的结果,混合了所有差异。
想要得到这样的东西。
我的问题与android功能相关,缩放由多个子视图组成的父级.
ZoomView-> ParentView - > [多个childViews]
我正在开发一个Demo项目来缩放子视图并无限地平移.缩放可以根据需要完美地工作.
问题1: 但是如果视图中有一个EditText,我试着放大,那么我面临下面的问题.
选择文本也存在上述问题.
如果不清楚,请尝试运行演示以了解问题
我尝试了两种缩放View内容的方法,但这两种方法都给出了同样的问题.
我的演示项目的层次结构缩放视图(UML图)
基本问题是当视图缩放到某个值时将光标放在正确的位置.
我已经提到了这个帖子
问题2: 如果我有一个childView这是在父视图移动,然后缩小,如果childView翻译的事件不再捕捉parentView的范围和子视图外后成为碰不得我一直在使用TouchDelegate尝试,但我不我知道如何扩展parentView触摸区域.代码 参考线程
scale为1,区域触摸区域等于parentView和ZoomView的屏幕
但是当比例因子不等于1时,父项的触摸区域(zoomIn)小于显示的ZoomView
黄色 - 父查看触摸区域
Cyan-ZoomView触摸区域
Green-ChildView触摸区域
ScreenShot在这里
注意: 这是我关于StackOverflow的第一个问题所以请建议是否需要进行一些编辑.
我正在使用BottomSheetDialogFragment显示一些自定义设置。
需求:
当我单击BottomSheetDialogFragment中的任何选项卡时,我会替换该片段并将其添加到Backstack中,以便当用户单击onBackPress或Up操作时,它应返回BottomSheetDialogFragment的最后一个设置的片段。
我想使用导航体系结构组件来简化我的交易。
问题:如果我使用导航体系结构组件从FragmentA导航到BottomSheetDialogFragment,那么我会收到以下错误。
java.lang.IllegalStateException:对话框不能为空BottomSheetDialogFragment
我不知道如何使用导航体系结构组件实例化BottomSheetDialogFragment,并且使用下面的代码将不会使用导航体系结构组件进行维护。
BottomSheetDialogFragment.show(FragmentManager manager, String tag)
Run Code Online (Sandbox Code Playgroud) android bottom-sheet android-architecture-components android-architecture-navigation
一旦运动场景结束,我在 MotionLayout 中有一个 NestedScrollView,然后 NestedScrollView 是可见的,但是当我尝试滚动视图时,没有事件会发生在 NestedScrollView。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/motion_scene"
tools:context=".screens.moviedetail.controller.MovieDetailFragment">
<ImageView
android:id="@+id/movieDetailPosterImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/poster_image"
android:scaleType="centerCrop"
android:src="@drawable/ic_image_24px" />
<TextView
android:id="@+id/movieDetailMovieTitleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/movieTitleBackground"
android:fontFamily="sans-serif-smallcaps"
android:gravity="center_vertical"
android:padding="@dimen/commonPadding"
android:text="@string/movie_title"
android:textColor="@android:color/white"
android:textSize="@dimen/commonTextSize" />
<androidx.core.widget.NestedScrollView
android:id="@+id/detailScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:orientation="vertical">
<TextView
android:id="@+id/movieDetailMovieOverviewHeadTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@string/movie_detail_heading_font"
android:gravity="center_vertical"
android:paddingStart="@dimen/commonPadding"
android:paddingLeft="@dimen/commonPadding"
android:paddingTop="@dimen/commonPadding"
android:paddingEnd="@dimen/commonPadding"
android:paddingRight="@dimen/commonPadding"
android:text="@string/overview"
android:textColor="@color/headTextColor"
android:textSize="@dimen/commonTextSize" />
<TextView
android:id="@+id/movieDetailMovieOverviewTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:fontFamily="@string/movie_detail_heading_font"
android:gravity="center_vertical"
android:maxLines="@integer/overviewMaxLength"
android:paddingStart="@dimen/commonPadding"
android:paddingLeft="@dimen/commonPadding"
android:paddingEnd="@dimen/commonPadding"
android:paddingRight="@dimen/commonPadding"
android:paddingBottom="@dimen/commonPadding"
android:textColor="@color/textColor"
android:textSize="@dimen/commonTextSize" /> …
Run Code Online (Sandbox Code Playgroud) 我正在为活动及其所有片段使用Single viewModel。
因此要初始化viewmodel
是否必须在onActivityCreated
所有片段的
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(activity!!).get(NoteViewModel::class.java)
}
Run Code Online (Sandbox Code Playgroud)
我正在浏览Android KTX扩展页面:(请参阅此处)
我发现我可以像这样初始化视图模型:
// Get a reference to the ViewModel scoped to this Fragment
val viewModel by viewModels<MyViewModel>()
// Get a reference to the ViewModel scoped to its Activity
val viewModel by activityViewModels<MyViewModel>()
Run Code Online (Sandbox Code Playgroud)
所以我在gradle(app)中添加了以下依赖项:
//ktx android
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.fragment:fragment-ktx:1.0.0'
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试viewModels/activityViewModels
在我的应用程序中使用它们的引用时,找不到。
我需要有关如何使用这些扩展名的一些基本示例的帮助,我尝试搜索一些未找到的示例。
android kotlin-android-extensions android-viewmodel android-jetpack androidx
我正在BottomSheetDialogFragment
满足我的要求是创建底部菜单,如果我在片段区域外单击,则不应取消对话框并应保留。
问题: 片段外的事件应传播到较低的片段视图/片段。
我已经在下面尝试过(不适用于BottomDialogFragment): Allow external touch for DialogFragment
要停止对话框中取消我尝试下面(我称之为setCancelable(boolean)
在onStart()
BottomDialogFragment的):
@Override
public void setCancelable(boolean cancelable) {
super.setCancelable(cancelable);
BottomSheetDialog dialog = (BottomSheetDialog) getDialog();
dialog.setCanceledOnTouchOutside(cancelable);
View bottomSheetView = dialog.getWindow().getDecorView().findViewById(R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheetView).setHideable(cancelable);
}
Run Code Online (Sandbox Code Playgroud)
编辑:发现它很难,没有其他方法然后使用坐标布局。BottomSheetDialog 的最佳解决方案是here
我尝试使用Android导航组件,但向后堆栈有问题。
我有片段A,B。我写道:
Navigation.findNavController(view).navigate(R.id.a_to_b)
Run Code Online (Sandbox Code Playgroud)
没关系。但是,如果我想返回A,请致电:
Navigation.findNavController(view).popBackStack();
Run Code Online (Sandbox Code Playgroud)
然后在片段B中将以空状态调用onViewStateRestored 为什么?
我想在导航到片段A时保持状态。
我查看了几个支持通过 url 播放音频文件的音频库,但没有人可以访问音频数据,以便我可以在播放时对其进行缓存。
所以我的问题是 -我可以将流音频数据缓存到设备中的文件吗?
我在原生 android 中找到了另一种方式
在设备上使用中间代理服务器而不是直接从 url 下载,因此您可以访问音频数据,并且可以在播放的同时写入文件。但我需要使用颤振来做到这一点。
我的用例是编辑 shapeAppearanceModelcom.google.android.material.card.MaterialCardView
card.shapeAppearanceModel = card.shapeAppearanceModel
.toBuilder()
.setTopEdge(TriangleEdgeTreatment(triangleSize))
.build()
Run Code Online (Sandbox Code Playgroud)
上面的代码按预期工作,但是由于上面以编程方式设置了 shapeAppearanceModel
<com.google.android.material.card.MaterialCardView
android:id="@+id/card"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardBackgroundColor="?myCustomColor"
app:cardCornerRadius="8dp"
app:cardElevation=4dp"
app:cardPreventCornerOverlap="true"
app:cardUseCompatPadding="false">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/myImageDrawable"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</com.google.android.material.card.MaterialCardView>
Run Code Online (Sandbox Code Playgroud)
在 Android studio 中,由于 TopEdge 以编程方式定义,编辑器不会复制该错误,但在模拟器/真实设备中,子项不会被剪切,并且圆角会被 ImageView 重叠。
当我删除 shapeAppearanceModel 设置时,裁剪工作将按预期进行。
android ×10
bottom-sheet ×2
android-architecture-components ×1
android-architecture-navigation ×1
androidx ×1
flutter ×1
fragment ×1
git ×1
scale ×1
view ×1