小编Ere*_*kçi的帖子

带有 Viewpager2 的关键 FragmentStateAdapter 不再存在 Fragment

我正在为我的项目使用 ViewPager2。我需要在带有 viewpager2 的片段中使用嵌套片段。在我尝试在片段(不是嵌套片段)之间导航之前,它就像魅力一样。

第一次在片段之间导航后,应用程序崩溃并显示下面解释的错误。

包含嵌套片段 OnCreateView 方法的片段:

View view = inflater.inflate(R.layout.orders_fragment, null);

ViewPager2 viewPager = view.findViewById(R.id.childViewPager);

TabLayout tabs = view.findViewById(R.id.tabs);

SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager(),getLifecycle());

viewPager.setAdapter(sectionsPagerAdapter);

TabLayoutMediator.TabConfigurationStrategy tabConfigurationStrategy = (tab, position) -> {

    String[] order_activity_tabs = getResources().getStringArray(R.array.situations);

    for (int i=0; i<order_activity_tabs.length; i++) {

        if(i==position)
            tab.setText(order_activity_tabs[i]);

    }
};

TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tabs, viewPager, tabConfigurationStrategy);
tabLayoutMediator.attach();

return view;
Run Code Online (Sandbox Code Playgroud)

当我返回包含嵌套片段的片段时,它会崩溃

 java.lang.IllegalStateException: Fragment no longer exists for key f#0: unique id 4fbe17b8-5e22-4e07-a543-4a79445ad39c
        at androidx.fragment.app.FragmentManagerImpl.getFragment(FragmentManagerImpl.java:365)
        at androidx.viewpager2.adapter.FragmentStateAdapter.restoreState(FragmentStateAdapter.java:549)
        at androidx.viewpager2.widget.ViewPager2.restorePendingState(ViewPager2.java:350)
        at androidx.viewpager2.widget.ViewPager2.dispatchRestoreInstanceState(ViewPager2.java:375)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:4045) …
Run Code Online (Sandbox Code Playgroud)

android android-adapter android-fragments fragmentstatepageradapter android-viewpager2

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

如何在新的 Google In App Purchase 中使用购买历史记录处理购买状态

我正在尝试创建一个恢复购买系统。我希望,用户可以通过他/她登录的任何设备访问其购买的产品。所以我在应用程序启动时使用“queryPurchaseHistoryAsync()”方法。我的问题从这里开始。

随着 Google 的新实现,与文档相反,queryPurchaseHistoryAsync() 参数发生了变化。现在它将 PurchaseHistoryRecord 对象列表作为参数而不是 Purchase 对象列表。

Android studio 无法解析文档中所述的方法。使用新的 queryPurchaseHistoryAsync() 无论如何我都找不到检查购买状态。(如果它已购买、取消或待处理)。我能够使用“purchase.getPurchaseState()”方法处理 Purchase 对象。

queryPurchaseHistoryAsync() 的文档

billingClient.queryPurchaseHistoryAsync(SkuType.INAPP,
                                         new PurchaseHistoryResponseListener() {
    @Override
    public void onPurchaseHistoryResponse(BillingResult billingResult,
                                          List<Purchase> purchasesList) {
        if (billingResult.getResponseCode() == BillingResponse.OK
                && purchasesList != null) {
            for (Purchase purchase : purchasesList) {
                // Process the result.
            }
         }
    }
});
Run Code Online (Sandbox Code Playgroud)

我的实现

implementation 'com.android.billingclient:billing:2.0.3'
Run Code Online (Sandbox Code Playgroud)

我的应用程序中的 queryPurchaseHistoryAsync() 方法

billingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.INAPP,
                new PurchaseHistoryResponseListener() {
                    @Override
                    public void onPurchaseHistoryResponse(BillingResult billingResult, List<PurchaseHistoryRecord> purchaseHistoryRecordList) {

                        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
                                && purchaseHistoryRecordList != null) { …
Run Code Online (Sandbox Code Playgroud)

android in-app-purchase in-app-billing play-billing-library

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

如何为启动画面实现夜间模式?

我设法为我的应用添加了夜间模式。它适用于整个应用程序,除了启动画面。启动画面使用操作系统夜间模式设置。我的应用程序级别更改不适用于启动画面。有没有办法在启动画面中处理夜间模式?

风格:

<style name="SplashScreenTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">

    <item name="android:background">@drawable/logo</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>

</style>
Run Code Online (Sandbox Code Playgroud)

@drawable/标志:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <color android:color="@color/compatible_night"/>
    </item>
    <item>
        <bitmap
            android:src="@drawable/grs"
            android:tileMode="disabled"
            android:gravity="center"
            />
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

颜色.xml(夜)

<color name="compatible_night">#121212</color>
Run Code Online (Sandbox Code Playgroud)

颜色文件

<color name="compatible_night">#FFFFFF</color>
Run Code Online (Sandbox Code Playgroud)

我尝试在夜间文件夹中使用样式,在夜间文件夹中使用颜色,在夜间文件夹中使用图层列表,但没有任何效果

android splash-screen android-night-mode

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