小编Anm*_*mol的帖子

什么是 ViewModelStore 和 viewModelStoreOwner?

由于这个新的 ViewModelProvider api,我很困惑(不推荐使用 ViewModelProviders)

与新变化一样,也有新的构造函数(源代码)。

#1

public ViewModelProvider(@NonNull ViewModelStoreOwner owner) {
        this(owner.getViewModelStore(), owner instanceof HasDefaultViewModelProviderFactory
                ? ((HasDefaultViewModelProviderFactory) owner).getDefaultViewModelProviderFactory()
                : NewInstanceFactory.getInstance());
    }
Run Code Online (Sandbox Code Playgroud)

#2

public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) {
        this(owner.getViewModelStore(), factory);
    }
Run Code Online (Sandbox Code Playgroud)

#3

 public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) {
        mFactory = factory;
        mViewModelStore = store;
    }
Run Code Online (Sandbox Code Playgroud)

Gradle依赖:

implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"
Run Code Online (Sandbox Code Playgroud)

所以这些构造函数的 require ViewModelStoreviewModelStoreOwner.

文件:

@param store {@code ViewModelStore} 将存储 ViewModel 的位置。

@param owner 一个 {@code ViewModelStoreOwner},其 {@link ViewModelStore} 将用于保留 {@code ViewModels}


任何人都可以定义它们以及如何使用它们以及它们对我们开发人员的真正意义吗?


ViewModelStoreOwner==activity/fragment 是什么?

android android-fragments android-activity android-viewmodel

28
推荐指数
1
解决办法
9323
查看次数

如何比较 Android Studio 中的两个 Git 分支?

我不确定是否可以像这样将主分支(或任何其他分支)与当前功能分支进行比较GIT

我想要两个分支(主分支和功能分支)之间的差异,以便我可以在合并之前比较差异。我发现 Git UI 不太用户友好。就像在 AS 中一样,我可以遍历代码并在那里更改它。

我找到了一个选项,我可以将任何分支与我当前的本地分支进行比较(这对我来说似乎是一个解决方案,但是当我使用它时,我感到非常困惑)。

SS!

SS2

Compare with current AS 的功能将两个分支与特定的选定提交进行比较。

虽然我需要的是比较两者的最新版本。(功能分支的头和主的头)就像我们在 Git 的合并请求中得到的一样。

PS-我想选择所有提交来获得整个差异,但它给出了一个非常不同的结果,混合了所有差异。

想要得到这样的东西。

党卫军#

git android android-studio

13
推荐指数
1
解决办法
4192
查看次数

Android:放置在父视图外部时,缩放EditText Android中的问题以及childView的get Touch事件

我的问题与android功能相关,缩放由多个子视图组成的父级.

ZoomView-> ParentView - > [多个childViews]

我正在开发一个Demo项目来缩放子视图并无限地平移.缩放可以根据需要完美地工作.

问题1: 但是如果视图中有一个EditText,我试着放大,那么我面临下面的问题.

  1. 放大文字是模糊的
  2. 指向文本工作正常但翻译文本翻译速度非常快,因为它的翻译乘以scalingFactor
  3. 选择文本也存在上述问题.

    如果不清楚,请尝试运行演示以了解问题

我尝试了两种缩放View内容的方法,但这两种方法都给出了同样的问题.

  • 通过缩放父类的Matrix.class的MotionEvent来缩放画布并转换MotionEvent.
  • 设置包含childViews的Parent的ScaleX和ScaleY

我的演示项目的层次结构缩放视图(UML图)

在此输入图像描述

基本问题是当视图缩放到某个值时将光标放在正确的位置.

我已经提到了这个帖子

问题2: 如果我有一个childView这是在父视图移动,然后缩小,如果childView翻译的事件不再捕捉parentView的范围和子视图外后成为碰不得我一直在使用TouchDelegate尝试,但我不我知道如何扩展parentView触摸区域.代码 参考线程

scale为1,区域触摸区域等于parentView和ZoomView的屏幕

但是当比例因子不等于1时,父项的触摸区域(zoomIn)小于显示的ZoomView

黄色 - 父查看触摸区域

Cyan-ZoomView触摸区域

Green-ChildView触摸区域

ScreenShot在这里

在此输入图像描述

注意: 这是我关于StackOverflow的第一个问题所以请建议是否需要进行一些编辑.

android view scale android-layout android-edittext

11
推荐指数
1
解决办法
411
查看次数

如何使用导航架构组件创建BottomSheetDialogFragment?

我正在使用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

10
推荐指数
1
解决办法
1801
查看次数

如何让 NestedScrollView 在 MotionLayout 中滚动?

一旦运动场景结束,我在 MotionLayout 中有一个 NestedScrollView,然后 NestedScrollView 是可见的,但是当我尝试滚动视图时,没有事件会发生在 NestedScrollView。

需求视频

布局xml:

<?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)

android android-nestedscrollview android-motionlayout

10
推荐指数
1
解决办法
2724
查看次数

如何通过viewModels获取viewModel?(片段-ktx)

我正在为活动及其所有片段使用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

9
推荐指数
4
解决办法
2354
查看次数

如何允许BottomSheetDialog的外部触摸?

我正在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

  • 这个解决方案解决了这个问题,但又带来了一个问题。即所有其他应用程序事件都没有导航所有 actionMode 事件。
  • 这是我对问题的最佳解决方案

android fragment bottom-sheet

7
推荐指数
3
解决办法
5040
查看次数

Android导航popBackStack

我尝试使用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时保持状态。

android android-fragments android-jetpack

6
推荐指数
1
解决办法
1754
查看次数

在颤动播放时缓存音频流

我查看了几个支持通过 url 播放音频文件的音频,但没有人可以访问音频数据,以便我可以在播放时对其进行缓存。

所以我的问题是 -我可以将流音频数据缓存到设备中的文件吗?

我在原生 android 中找到了另一种方式

这里

在设备上使用中间代理服务器而不是直接从 url 下载,因此您可以访问音频数据,并且可以在播放的同时写入文件。但我需要使用颤振来做到这一点。

android audio-streaming offline-caching flutter

5
推荐指数
0
解决办法
534
查看次数

为什么在 MaterialCardView 中设置 shapeAppearanceModel 会停止子剪辑?

我的用例是编辑 shapeAppearanceModelcom.google.android.material.card.MaterialCardView

card.shapeAppearanceModel = card.shapeAppearanceModel
            .toBuilder()
            .setTopEdge(TriangleEdgeTreatment(triangleSize))
            .build()
Run Code Online (Sandbox Code Playgroud)

上面的代码按预期工作,但是由于上面以编程方式设置了 shapeAppearanceModel

XML

 <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 android-cardview materialcardview

5
推荐指数
1
解决办法
1273
查看次数