小编pyu*_*s13的帖子

如何监听 Android Webview 中的任何 cookie 更改

我的应用程序使用 webview 打开一个网页,该网页正在更新网页上进行的某些交互的一些 cookie。现在我想读取该 cookie 并根据 cookie 的值进行一些 UI 调整。

iOs 有一些观察者的实现,可以附加到 cookie 列表并获取任何 cookie 更改发生的通知。

我长期以来一直在搜索类似的解决方案,但找不到任何类型的侦听器或可以附加到 cookie 并了解它们何时更新的东西。

我阅读了所有内容CookieManagerCookieSyncManger

https://developer.android.com/reference/java/net/CookieManager.html

https://developer.android.com/reference/java/net/CookieManager.html

但没有什么帮助。

我知道使用 javascript 接口挂钩是一个更好的解决方案,但目前无法实现,因为该网站已经在生产环境中运行。

android android-webview

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

从MVVM架构中的ViewModel启动Activity的最佳方法

我在app中关注MMVM架构,Everything工作正常,直到我使用以下代码从ViewModel启动活动时崩溃.使用数据绑定从XML调用方法并将其view作为参数传递,并且getApplication()AndroidViewModel类中的方法.

getApplication().startActivity(new Intent(view.getContext(), MyActivity.class));
Run Code Online (Sandbox Code Playgroud)

我相信这是因为我没有使用NEW_TASK标志,因为我在Activity类之外开始活动.

现在有以下解决方案我可以想到但不确定哪一个最好基于架构观点.

1. ViewModel,其方法采用Activity参数并从片段中调用该方法

public startMyActivity(Activity activity){
   activity.startActivity(new Intent(activity, MyActivity.class));
}
Run Code Online (Sandbox Code Playgroud)

现在在片段中添加类似这样的列表器

mBinding.myButton.setOnClickListener(){
    viewModel.startMyActivity(getActivity());  
}
Run Code Online (Sandbox Code Playgroud)

2.向intent添加一个New Task标志并将其保存在ViewModel本身中

Intent myIntent = new Intent(view.getContext(), MyActivity.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
getApplication().startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud)

3.从片段本身启动Activity

mBinding.myButton.setOnClickListener(){
   activity.startActivity(new Intent(activity, MyActivity.class));
}
Run Code Online (Sandbox Code Playgroud)

我相信所有这些方法都很好,但是一个问题

是否可以在Fragment中分别使用绑定的ViewModel从view xml调用方法?

我不确定第二种方法,如果这仍然会在某些操作系统中崩溃应用程序.

从架构的角度和单元测试的角度来看哪一个是最好的方法?

android mvvm android-mvvm android-viewmodel

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

结果代码始终为0,因为卸载了Android中的Intent

从我的应用程序我试图通过使用代码卸载应用程序

Intent uninstallIntent = new Intent(Intent.ACTION_DELETE);
uninstallIntent.setData(Uri.parse("package:" +packageName));
uninstallIntent.setAction(Intent.ACTION_VIEW);
startActivityForResult(uninstallIntent,UNINSTALL_APPLICATION);
Run Code Online (Sandbox Code Playgroud)

根据我开始的结果活动我想根据用户的输入执行不同的操作,如果取消或点击确定.

正如我所料,点击确定的结果代码将是,RESULT_OK并且点击取消将是RESULT_CANCEL,但实际上在两种情况下我得到RESULT_CANCEL.

那么我该如何区分用户的输入.

谢谢!

android android-intent android-activity

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

允许 NestedScrollView 在具有自定义行为的 BottomSheet 内完全滚动

我有一个带有子 NestedScrollView 的底部工作表。我想将整个 NestedScrollView 一直滚动到底部,而无需将底部工作表向上滑动。

如果用户希望底部工作表一直向上,他们必须使用锚点,别无他法。

现在,当使用开始向下滚动时,在滚动整个内容后,我希望底部工作表在下一个滚动操作时隐藏。

由于默认的底部工作表行为不允许我创建自己的自定义行为并覆盖 onNestedScroll() 和 onNestedPreScroll()。

我面临两个问题:

1 :Nestedscrollview 部分滚动并停止,因为对于底部工作表,它看到没有更多内容可以滚动。我必须向上滑动工作表才​​能看到其余的内容。意味着我无法在不展开工作表的情况下看到 NestedScrollView 中的最后一项。

2:如何检测 NestedScrollChild 是向上滚动还是向下滚动。因为我希望 BottomSheet 在滚动视图完成滚动其内容后拦截事件。我试过 onNestedPreScroll 但似乎不一定每次滚动孩子时都会触发它。将侦听器附加到滚动视图是唯一的解决方案吗?

在 GIF https://photos.app.goo.gl/RPmDFEtR9TbGHrau6 中查看问题的链接

下面是我的布局和行为类。

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

<com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar">

    <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
    />
</com.google.android.material.appbar.AppBarLayout>
Run Code Online (Sandbox Code Playgroud) -->
<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/bs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bottom_sheet_background_shaded"
        android:elevation="10dp"
        app:behavior_hideable="false"
        app:behavior_peekHeight="35dp"
        app:behavior_fitToContents="false"
        app:layout_behavior="com.pyus13.bottomsheetsample.MyBottomSheetBehaviour">

    <ImageView
            android:id="@+id/anchor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="1dp"
            android:src="@drawable/bottom_sheet_anchor_holder"
            app:layout_constraintBottom_toTopOf="@+id/main_container"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

    <androidx.core.widget.NestedScrollView
            android:id="@+id/main_container"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:clipToPadding="false"
            android:elevation="5dp"
            android:gravity="center"
            android:paddingTop="20dp"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" …
Run Code Online (Sandbox Code Playgroud)

android android-coordinatorlayout bottom-sheet android-jetpack

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

四舍五入在Android中无法正常工作

我使用以下代码来舍入十进制数

private float roundOffTwoDigits(float number) {
    DecimalFormat toTheFormat = new DecimalFormat("0.0");
    toTheFormat.setRoundingMode(RoundingMode.DOWN);
    number = Float.valueOf(toTheFormat.format(number));
    return number;
}
Run Code Online (Sandbox Code Playgroud)

现在有我得到的输出

输入输出

2.2> 2.2

2.21> 2.2

2.28> 2.2

2.4> 2.4

2.6> 2.5(为什么2.5应该是2.6)

2.8> 2.7(为什么2.7应该是2.8)

因此,即使是小数位后的数字,如果它大于5,它也会减少不应该发生的值.

有人用这个问题标记了我的问题重复这里是浮点数学吗?,我不确定为什么?

这个问题与java和android完全没有关系,也没有我期待的答案和讨论.

java android

-2
推荐指数
1
解决办法
75
查看次数