小编tom*_*mas的帖子

是否可以将 lambda 传递给 Intent?

我想知道是否可以将 lambda 传递给 kotlin 中的 Intent,因为 lambda 是可序列化的,但是使用这段代码,我在创建 PendingIntent 时遇到错误。

val bundle = bundleOf(ACTION to { pause() })
val playButtonIntent = Intent(this, MusicService::class.java).apply {
        putExtras(bundle)
}
val pendingPlayIntent = PendingIntent.getService(this, 1, playButtonIntent, 0)
Run Code Online (Sandbox Code Playgroud)

错误:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object
Run Code Online (Sandbox Code Playgroud)

lambda serialization android kotlin

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

使用分页库和自定义数据源时如何更新列表项?

我正在使用分页库,当我直接DataSource.Factory<Int, Data>从 Dao 返回然后像这样设置分页列表时,一切都运行良好

pagedList = LivePagedListBuilder(dao().getAllData(), config).build()

当我单击列表项时,它会发生变化,更新房间数据库,并通过分页自动更新 UI。但我需要使用自定义数据源。所以我创建了一个,现在我像这样设置分页列表

pagedList = LivePagedListBuilder(customDatasourceFactory, config).build()

问题是,现在当我更新房间表中的一行时,UI 不会自动更新。invalidate()当我的数据集更改时我也会使用。但在这种情况下,当我只想更新单个项目时,我无法使用它,因为我的位置数据源随后加载第一页,当我位于列表中间时,更改列表项,它会跳到顶部。

所以基本上我想要的是实现与我从 Dao 直接返回 Datasource Factory 时相同的行为,但现在使用我自己的数据源。

android android-room android-architecture-components android-jetpack android-paging

5
推荐指数
0
解决办法
694
查看次数

如何更新LiveData值?

我正在为我的数据使用新的分页库.创建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

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