我正在使用新的Android Paging库来获得具有无限滚动功能的RecyclerView.我无法理解为什么当我像这样设置我的PagedList时,库不会触发loadAfter()方法:
val config: PagedList.Config = PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setPageSize(10)
.setPrefetchDistance(1)
.setInitialLoadSizeHint(10)
.build()
val pageList = PagedList.Builder(LookDataSource(lookList), config)
.setInitialKey(0)
.setMainThreadExecutor(MainThreadExecutor())
.setBackgroundThreadExecutor(PaginationThreadPoolExecutor())
.setBoundaryCallback(LookBoundaryCallback())
.build()
Run Code Online (Sandbox Code Playgroud)
注意:我的prefetchDistance是1,因为我想在看到最后一个项目时加载另一批数据.文档说0将永远不会加载更多数据
我的DataSource是一个PageKeyedDataSource,键是页面的索引.
我已经调查的源代码ContiguousPagedList这是当你使用一个PageKeyedDataSource,我无法理解这些所产生的特定PagedList:
@MainThread
@Override
protected void loadAroundInternal(int index) {
int prependItems = mConfig.prefetchDistance - (index - mStorage.getLeadingNullCount());
int appendItems = index + mConfig.prefetchDistance
- (mStorage.getLeadingNullCount() + mStorage.getStorageCount());
mPrependItemsRequested = Math.max(prependItems, mPrependItemsRequested);
if (mPrependItemsRequested > 0) {
schedulePrepend();
}
mAppendItemsRequested = Math.max(appendItems, mAppendItemsRequested);
if (mAppendItemsRequested > 0) {
scheduleAppend();
}
}
Run Code Online (Sandbox Code Playgroud)
根据我的配置,当看到我的最后一项时,appendItems …
pagination android android-recyclerview android-architecture-components
假设这里已经说过,开发人员有责任保留组件实例以实现自己的范围逻辑(因为范围方法将为给定组件返回相同的实例).
通过活动生命周期保持此组件引用的干净方法是什么?
示例:您正在实施MVP模式,因此您需要在Activity中使用Presenter.此演示者可以执行网络操作来下载项目.当设备旋转时,您的Activity将被销毁并重新创建,但您希望保持网络运行并返回预旋转演示者.
在为Presenter提供自定义PerActivity范围的组件范围是解决方案,因此您必须通过此循环保持Component实例,以便在首次启动Activity时注入相同的Presenter实例.
我们怎么处理这个?我想到了一种组件缓存(如HashMap?),它可以由Application类中的Application Component提供.
我在Android级别的API级别15上遇到了actionBar兼容性问题.向上按钮不适用于此API级别
我使用android-sdk文件夹中提供的名为"actionbarcompat"的示例项目,因此我导入了所有类,并使用ActionBarActivity扩展了我的所有活动.我还在Manifest中为我的所有活动添加了这段代码:
<activity
android:name="fr.appsolute.rescue.MyActivity"
android:label="@string/title_activity_info"
android:parentActivityName=".MainActivity"
android:screenOrientation="portrait" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
Run Code Online (Sandbox Code Playgroud)
在我的ActionBarActivity中:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch(item.getItemId()){
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
这允许用户触摸向上按钮(使用应用程序图标)返回MainActivity
此代码适用于Android 2.3.3和4.2,但不适用于4.0.1,我不明白为什么.当用户触摸向上按钮时,没有任何反应.
谢谢你的帮助.
PS:我不能使用外部库,我必须使用本机代码
如果您使用的是DownloadManager, Android N会直接在下载通知上显示"取消"功能.
他们是否添加了任何意图过滤器操作来捕获此事件?
此时,DownloadManager只获得3个动作:
ACTION_DOWNLOAD_COMPLETE
ACTION_NOTIFICATION_CLICKED
ACTION_VIEW_DOWNLOADS
我尝试使用ACTION_NOTIFICATION_CLICKED手动取消下载,但如果用户点击"取消"按钮,我就不会收到通知.