我正在为我的项目使用 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
我正在尝试创建一个恢复购买系统。我希望,用户可以通过他/她登录的任何设备访问其购买的产品。所以我在应用程序启动时使用“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) 我设法为我的应用添加了夜间模式。它适用于整个应用程序,除了启动画面。启动画面使用操作系统夜间模式设置。我的应用程序级别更改不适用于启动画面。有没有办法在启动画面中处理夜间模式?
风格:
<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 ×3