我的应用程序使用 webview 打开一个网页,该网页正在更新网页上进行的某些交互的一些 cookie。现在我想读取该 cookie 并根据 cookie 的值进行一些 UI 调整。
iOs 有一些观察者的实现,可以附加到 cookie 列表并获取任何 cookie 更改发生的通知。
我长期以来一直在搜索类似的解决方案,但找不到任何类型的侦听器或可以附加到 cookie 并了解它们何时更新的东西。
我阅读了所有内容CookieManager并CookieSyncManger
https://developer.android.com/reference/java/net/CookieManager.html
https://developer.android.com/reference/java/net/CookieManager.html
但没有什么帮助。
我知道使用 javascript 接口挂钩是一个更好的解决方案,但目前无法实现,因为该网站已经在生产环境中运行。
我在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调用方法?
我不确定第二种方法,如果这仍然会在某些操作系统中崩溃应用程序.
从架构的角度和单元测试的角度来看哪一个是最好的方法?
从我的应用程序我试图通过使用代码卸载应用程序
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.
那么我该如何区分用户的输入.
谢谢!
我有一个带有子 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
我使用以下代码来舍入十进制数
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)
现在有我得到的输出
因此,即使是小数位后的数字,如果它大于5,它也会减少不应该发生的值.
有人用这个问题标记了我的问题重复这里是浮点数学吗?,我不确定为什么?
这个问题与java和android完全没有关系,也没有我期待的答案和讨论.