小编axl*_*rtr的帖子

如何转到使用分页 3 加载数据的视图分页器 2 的位置?

我使用 ViewPager2 来显示从服务器获取的数据,并使用 Paging 3 库保存到 Room 数据库。我的问题是,如何通过代码导航到特定的视图寻呼机项目?如果我使用 viewPager.setCurrentItem(position, false) 那么这不起作用。例如,如果我在向左/向右滑动时动态加载总共 3000 个项目,如何将位置设置为 1000,然后从那里双向导航/加载数据?我无法让它发挥作用。

PS:在下面的 DogPagingMediator 类中,我还尝试在刷新块中设置一些起始编号而不是最新(最高)编号,但是在加载应用程序时,如果编号较高的项目不这样做,则视图寻呼机只会从此位置开始t 存在于数据库本地,否则它将始终从编号最高的项目开始,无论刷新中返回的页面如何(我假设因为dogDao.getDogs() 按降序获取数据库中的所有项目)。

PPS:我使用实时数据而不是 Flow 的原因是因为 Flow 在我滑动时由于某种原因导致 NullPointerException 。

包含视图分页器的片段中的 onCreateView 代码:

    lifecycleScope.launch {
        // Fetch the latest dog item from the network (data is sorted by descending)
        if (!browseDogsViewModel.latestDogIsFetched()) {
            browseDogsViewModel.setLatestDogNumber()
        }

        browseDogsViewModel.pagingDataStream.observe(viewLifecycleOwner) {
            adapter.submitData(viewLifecycleOwner.lifecycle, it)
        }
    }
Run Code Online (Sandbox Code Playgroud)

从视图模型来看:

val pagingDataStream = repository.getAllDogsPagingData()

suspend fun setLatestDogNumber() {
    latestDogNumber = repository.getLatestDogNumber()
}
Run Code Online (Sandbox Code Playgroud)

从存储库:

fun getAllDogsPagingData() = Pager(
    config = PagingConfig(pageSize = PAGE_SIZE),
    remoteMediator …
Run Code Online (Sandbox Code Playgroud)

android android-paging android-viewpager2

7
推荐指数
1
解决办法
2221
查看次数

如何使用Xamarin在iOS 13中获取设备令牌?

我们的RegisteredForRemoteNotifications代码中断,因为使用以下方法检索了令牌:

deviceToken.ToString().Trim('<').Trim('>').Replace(" ", "");
Run Code Online (Sandbox Code Playgroud)

这曾经可以使用,但不适用于iOS 13,因为数据如下所示:

"{length = 32, bytes = 0x965b251c 6cb1926d e3cb366f dfb16ddd ... 5f857679 376eab7c }"
Run Code Online (Sandbox Code Playgroud)

对于如何使用目标c和swift正确执行此操作,有答案,但是我还没有找到使用C#的答案。

参考:

获取用于推送通知的设备令牌

https://nshipster.com/apns-device-tokens/

如何用Xamarin做到这一点?

c# xamarin.ios ios xamarin xamarin.forms

2
推荐指数
2
解决办法
1049
查看次数

与 ConstraintLayout 一起使用时,按钮文本不会换行

我有 2 个按钮彼此相邻(链接),并且应用程序中可能有 2 种状态,要么只有左按钮可见,在这种情况下它应该水平居中,或者两者都可见,在这种情况下它们都应该水平居中。这一切都有效,但是按钮中有多个单词,并且在小屏幕上,按钮都被剪裁而不是换行。要修复此设置,将两个按钮的宽度设置为 0dp 有效,但是在这种情况下,按钮会变得尽可能宽,因此在较大的屏幕上或只有一个按钮可见时,它看起来不正确。我的问题是如何在使用 ConstraintLayout 时将文字包裹在按钮中?我如何约束按钮,使它们正确包裹并且不会变得比它们需要的更宽?使用 LinearLayout 这一切都是开箱即用的,但我想使用 ConstraintLayout。我尝试在两个按钮上设置 app:layout_constrainedWidth="true" 但这不起作用,它只会包装第一个按钮,如果第二个按钮有足够长的文本,它将不存在。

更新:我将示例中的按钮文本更新为更长。

XML:

            <Button
                android:id="@+id/button1"
                style="@style/Widget.AppCompat.Button.Colored"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:layout_marginEnd="8dp"
                android:layout_marginRight="8dp"
                android:text="Long text for first button"
                app:layout_constraintEnd_toStartOf="@+id/button2"
                app:layout_constraintHorizontal_bias="0.5"
                app:layout_constraintHorizontal_chainStyle="packed"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/objectAboveButtons"
                app:layout_goneMarginEnd="0dp"
                app:layout_goneMarginRight="0dp" />

            <Button
                android:id="@+id/button2"
                style="@style/Widget.AppCompat.Button.Colored"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginTop="16dp"
                android:text="Long text for second button"
                android:visibility="gone"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.5"
                app:layout_constraintStart_toEndOf="@+id/button1"
                app:layout_constraintTop_toBottomOf="@+id/objectAboveButtons" />
Run Code Online (Sandbox Code Playgroud)

android android-layout android-constraintlayout

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