小编Raf*_*yan的帖子

Android Paging库不会触发loadAfter()

我正在使用新的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

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

在方向变化时处理匕首组件

假设这里已经说过,开发人员有责任保留组件实例以实现自己的范围逻辑(因为范围方法将为给定组件返回相同的实例).

通过活动生命周期保持此组件引用的干净方法是什么?

示例:您正在实施MVP模式,因此您需要在Activity中使用Presenter.此演示者可以执行网络操作来下载项目.当设备旋转时,您的Activity将被销毁并重新创建,但您希望保持网络运行并返回预旋转演示者.

在为Presenter提供自定义PerActivity范围的组件范围是解决方案,因此您必须通过此循环保持Component实例,以便在首次启动Activity时注入相同的Presenter实例.

我们怎么处理这个?我想到了一种组件缓存(如HashMap?),它可以由Application类中的Application Component提供.

java android dependency-injection dagger dagger-2

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

与API 15的ActionBar兼容性问题

我在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:我不能使用外部库,我必须使用本机代码

java android android-actionbar

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

DownloadManager和Android 7.0取消功能

如果您使用的是DownloadManager, Android N会直接在下载通知上显示"取消"功能.

他们是否添加了任何意图过滤器操作来捕获此事件?

此时,DownloadManager只获得3个动作:

  • ACTION_DOWNLOAD_COMPLETE

  • ACTION_NOTIFICATION_CLICKED

  • ACTION_VIEW_DOWNLOADS

我尝试使用ACTION_NOTIFICATION_CLICKED手动取消下载,但如果用户点击"取消"按钮,我就不会收到通知.

android broadcastreceiver android-7.0-nougat

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