我希望在我的应用程序中使用新的体系结构组件“分页库” https://developer.android.com/topic/libraries/architecture/paging.html,该组件从服务器中获取数据并在recyclerview中显示。
分页库是一个很好的补充,有助于管理内容分页。我检查了所有样本,它们工作正常。但是我有一个要求,那就是当我们滚动到recyclerview的末尾并且下一页开始加载时(由分页库管理),我需要在底部显示一个进度条行。
我知道如何使用recyclerview滚动侦听器和2种视图类型执行此操作。但是我正在寻找的解决方案是如何使用“分页库”来做到这一点。它具有启用占位符的选项,这不是我想要的。
对此,我们将给予任何帮助。
android android-architecture-lifecycle android-architecture-components android-paging
我的应用程序正在使用Android的Architecture组件库,并显示从具有无限滚动效果的分页REST api获取的项目列表。
我想做的是将Paging Library与NetworkBoundResource结合使用,以便当用户向下滚动列表时,将从数据库中提取下一个项目并显示是否存在,并且同时调用API以更新数据库中的项目。
我找不到这两种模式同居的任何例子。
这是DAO:
@Query("SELECT * FROM items ORDER BY id DESC")
LivePagedListProvider<Integer,MyItem> loadListPaginated();
Run Code Online (Sandbox Code Playgroud)
这是我的NetworkBoundResource实现:
public class PagedListNetworkBoundResource extends NetworkBoundResource<PagedList<MyItem>, List<MyItem>> {
@Override
protected void saveCallResult(@NonNull List<MyItem> items) {
// Inserting new items into DB
dao.insertAll(items);
}
@Override
protected boolean shouldFetch(@Nullable PagedList<MyItem> data) {
return true;
}
@NonNull
@Override
protected LiveData<PagedList<MyItem>> loadFromDb() {
return Transformations.switchMap(dao.loadListPaginated().create(INITIAL_LOAD_KEY, PAGE_SIZE),
new Function<PagedList<MyItem>, LiveData<List<MyItem>>>() {
@Override
public LiveData<PagedList<MyItem>> apply(final PagedList<MyItem> input) {
// Here I …Run Code Online (Sandbox Code Playgroud) paging android android-architecture-components android-paging
升级到Google Play Services 7.0后,我GoogleApiClient连接Google Fit的代码不再有效:它说:
错误:(87,21)错误:没有为addApi(Void)方法找到合适的方法Builder.addApi(Api,O)不适用(无法从参数实例化,因为实际和形式参数列表的长度不同)方法Builder.addApi( Api)不适用(实际参数Void不能通过方法调用转换转换为Api)其中O是类型变量:O扩展方法addApi(Api,O)中声明的HasOptions
我的构建代码GoogleApiClient是:
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
Run Code Online (Sandbox Code Playgroud) 我正在为我的数据使用新的分页库.创建ViewModel并首次初始化实时数据时,一切正常.问题是,当我点击菜单项并希望用不同的数据集更新时,我无法更新我的实时数据的值.然后我的片段中的onChanged方法不会被调用.我已经阅读了有关MutableLiveData和setValue和postValue等可以更新实时数据的方法,但在我的情况下,我使用的是LivePagedListProvider并且无法从数据库返回MutableLiveData.
道:
@Query("SELECT * FROM teams ORDER BY name ASC")
LivePagedListProvider<Integer, Team> getAllTeams();
Run Code Online (Sandbox Code Playgroud)
分段:
mTeamViewModel.mTeamsList.observe(this, new Observer<PagedList<Team>>() {
@Override
public void onChanged(@Nullable PagedList<Team> teams) {
mTeamAdapter.setList(teams);
}
});
Run Code Online (Sandbox Code Playgroud)
视图模型:
public LiveData<PagedList<Team>> mTeamsList;
@Inject
DatabaseManager mDatabaseManager;
void setTeamViewModel(final DatabaseManager databaseManager) {
mDatabaseManager = databaseManager;
mTeamsList = mDatabaseManager.getAllTeams().create(
0,
new PagedList.Config.Builder()
.setPageSize(50)
.setPrefetchDistance(50)
.setEnablePlaceholders(true)
.build());
}
boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case R.id.action_favorite:
mTeamsList = mDatabaseManager.getFavoriteTeams().create(
0,
new PagedList.Config.Builder()
.setPageSize(50)
.setPrefetchDistance(50)
.build());
return true;
default: return false;
}
}
Run Code Online (Sandbox Code Playgroud) android android-livedata android-architecture-components android-paging
我正在尝试在我的项目中实现谷歌的分页库.所有的东西都已编码,网络调用在loadInitial()中工作但它永远不会进入loadAfter().由于代码结构非常复杂,我不会直接在这里发布代码.
这是存储库:
https://github.com/raghavsatyadev/PagingDemo
文件链接:https://github.com/raghavsatyadev/PagingDemo/blob/master/app/src/main/java/com/rocky/invmx/modules/order/OrdersActivity.java
根据谷歌的 Yigit Boyar 的回应,Live Data 不是聊天应用程序的最佳用例,因为如果它们同时出现,它可能会丢失显示某些项目。他建议使用新的 Google 分页库。我一直在将 ItemKeyedDataSource 用于我的收件箱(所有向用户发送消息的人)和内部聊天(消息本身)。问题如下:
1- 从聊天中,当用户向下滚动时,用户检索旧消息,这意味着这些消息的插入应该在适配器的位置 0,而不是像分页库那样按顺序插入。如何将插入项目的位置依次交替用于新消息和位置 0 用于旧消息?
2-从收件箱(向用户发送消息的人),我再次在这里使用 ItemKeyedDataSource,问题是我想维护存储库中的多文档侦听器(我使用的是 Firebase Firestore),所以我可以检测每次有新人与用户交谈时。问题是callback.onResult它只被调用一次,并且在 Firebase 发送另一个用户时失败。如何维护可更新列表?
pagination android firebase google-cloud-firestore android-paging
我正在使用 Jetpack Navigation 来处理 Fragment 的导航。按照文档操作后,当我运行该应用程序时,出现以下错误。
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.navigation.fragment.NavHostFragment"
Run Code Online (Sandbox Code Playgroud)
构建.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 'android-P'
defaultConfig {
applicationId "com.meditab.imspatient"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
def nav_version = "1.0.0-alpha01"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.constraintlayout:constraintlayout:1.1.0' // Constraint layout
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // Kotlin
// Anko
implementation "org.jetbrains.anko:anko-commons:$anko_version" // …Run Code Online (Sandbox Code Playgroud) android kotlin android-navigation android-jetpack android-architecture-navigation
我刚刚查看了分页库,发现BoundaryCallback有三个方法。对于名为onItemAtFrontLoaded()的方法之一,文档说
Called when the item at the front of the PagedList has been loaded, and access has occurred within prefetchDistance of it.
Run Code Online (Sandbox Code Playgroud)
我不太确定什么时候会调用这个方法,有人可以给我一个详细的例子吗?
android ×8
android-architecture-components ×4
android-architecture-lifecycle ×1
android-architecture-navigation ×1
firebase ×1
google-fit ×1
java ×1
kotlin ×1
pagination ×1
paging ×1