Questions tagged «android-architecture-components»

新的库集合可帮助您设计功能强大,可测试和可维护的Android应用。从用于管理UI组件生命周期和处理数据持久性的类开始。

10
什么是AndroidX?
我正在阅读有关Android房间库的信息。我看到他们将软件包更改android为androidx。我不明白。有人可以解释一下吗? implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" android包也提供此功能。 implementation "android.arch.persistence.room:runtime:$room_version" annotationProcessor "android.arch.persistence.room:compiler:$room_version" 有什么需要打包新的支持库androidx而不是android? 现有项目中的用例和影响因素。



3
AndroidViewModel与ViewModel
随着Android Architecture Components库的引入,引入了几个新类,包括AndroidViewModel和ViewModel。但是,我很难弄清楚这两个类之间的区别。该文档简要描述AndroidViewModel如下: 应用程序上下文感知 ViewModel 我很简短,但是这意味着什么呢?我们什么时候应该选择使用AndroidViewModelover ViewModel,反之亦然?

21
ViewModelProviders在1.1.0中已弃用
在查看的Google文档时ViewModel,他们显示了以下有关如何获取的示例代码ViewModel: val model = ViewModelProviders.of(this).get(MyViewModel::class.java) 使用最新的依赖项时android.arch.lifecycle:extensions:1.1.1,没有此类ViewModelProviders。 要在文档的ViewModelProviders,我看到一个评论说: 在API级别1.1.0中不推荐使用该类。使用ViewModelProvider.AndroidViewModelFactory 问题是,当尝试使用时ViewModelProvider.AndroidViewModelFactory,找不到等效的of方法来获取的实例ViewModel。 我尝试做的是: ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(PlayerViewHolder::class.java) 因此,方法的名称create每次调用时都会得到一个ViewModel的新实例,这不是我想要的。 有什么想法可以替换上面不推荐使用的代码吗?

14
无法解析AppCompatActivity上的符号ViewModelProviders
嘿,我正在尝试使ViewModel正常工作,但是到目前为止还没有运气。Android Studio显示错误Cannot resolve symbol 'ViewModelProviders'。 我在此主题上发现的所有其他问题都已纠正extends Activity为extends AppCompatActivity,但我正在扩展正确的问题。不确定我缺少什么... 我的代码基于此YouTube视频 MainActivity.java public class MainActivity extends AppCompatActivity implements TileAdapter.TileAdapterOnClickHandler { private BaseViewModel viewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //set Toolbar Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar); //initialize viewModel viewModel = ViewModelProviders.of(this).get(BaseViewModel.class); BaseViewModel.java public class BaseViewModel extends ViewModel { private Movie[] …

12
导航到Android中的另一个片段后如何清除导航堆栈
我在android中使用新的Navigation Architecture组件,并且在移至新片段后仍无法清除导航堆栈。 示例:我在loginFragment中,并且当我导航到home片段时,我希望从堆栈中清除此片段,以便用户在按“后退”按钮时不会返回到loginFragment。 我正在使用一个简单的NavHostFragment.findNavController(Fragment).navigate(R.id.homeFragment)进行导航。 当前代码: mAuth.signInWithCredential(credential) .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment); } else { Log.w(TAG, "signInWithCredential:failure", task.getException()); } } }); 我尝试使用NavOptions在导航() ,但后退按钮仍然送我回loginFragment NavOptions.Builder navBuilder = new NavOptions.Builder(); NavOptions navOptions = navBuilder.setPopUpTo(R.id.homeFragment, false).build(); NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment, null, navOptions);

8
Android Room Persistence Library:Upsert
Android的Room持久性库优雅地包含适用于对象或集合的@Insert和@Update批注。但是,我有一个用例(包含模型的推送通知),由于数据库中可能存在或可能不存在数据,因此需要UPSERT。 Sqlite本身没有upsert,因此在SO问题中描述了解决方法。给定那里的解决方案,如何将它们应用于Room? 更具体地说,如何在Room中实现不会破坏任何外键约束的插入或更新?在onConflict = REPLACE上使用insert将导致onDelete调用该行的任何外键。在我的情况下,onDelete导致级联,而重新插入行将导致其他表中具有外键的行被删除。这不是预期的行为。

3
为什么有单独的LiveData子类MutableLiveData子类?
看起来MutableLiveData与LiveData仅通过公开setValue()和postValue()方法有所不同,而LiveData它们却受到保护。 有什么理由为此更改创建一个单独的类,而不是简单地将这些方法LiveData本身定义为公共方法? 一般来说,这种继承形式(增加某些方法的可见性是唯一的更改)是否是众所周知的做法,并且在某些情况下它可能有用(假设我们可以访问所有代码)?

5
如何从后台服务和更新UI更新ViewModel的LiveData
最近,我正在探索Google最近引入的Android体系结构。从文档中我发现: public class MyViewModel extends ViewModel { private MutableLiveData<List<User>> users; public LiveData<List<User>> getUsers() { if (users == null) { users = new MutableLiveData<List<Users>>(); loadUsers(); } return users; } private void loadUsers() { // do async operation to fetch users } } 活动可以访问此列表,如下所示: public class MyActivity extends AppCompatActivity { public void …

4
从ViewModel观察LiveData
我有一个单独的类,负责处理数据提取(特别是Firebase),通常从中返回LiveData对象并异步更新它们。现在,我想将返回的数据存储在ViewModel中,但是问题是,为了获取所述值,我需要观察从数据获取类返回的LiveData对象。观察方法要求将LifecycleOwner对象作为第一个参数,但是我显然不在ViewModel中拥有该对象,并且我知道我不应该在ViewModel中保留对Activity / Fragment的引用。我该怎么办?

6
Android Room:使用Room插入关系实体
我已使用Relation在Room中添加了一对多关系。我参考了这篇文章,为Room中的关系编写了以下代码。 该帖子介绍了如何从数据库中读取值,但是将实体存储到数据库中导致结果userId为空,这意味着两个表之间没有关系。 我不知道什么是理想的途径,insert一个User并List of Pet到数据库中,同时具有userId价值。 1)用户实体: @Entity public class User { @PrimaryKey public int id; // User id } 2)宠物实体: @Entity public class Pet { @PrimaryKey public int id; // Pet id public int userId; // User id public String name; } 3)UserWithPets POJO: // Note: No annotation required at …

24
房间持久性:错误:实体和Pojos必须具有可用的公共构造函数
我正在将一个项目转换为Kotlin,并且试图将我的模型(也是我的实体)变成一个数据类,我打算使用Moshi来转换来自API的JSON响应 @Entity(tableName = "movies") data class MovieKt( @PrimaryKey var id : Int, var title: String, var overview: String, var poster_path: String, var backdrop_path: String, var release_date: String, var vote_average: Double, var isFavorite: Int ) 我无法构建导致以下错误的应用 实体和Pojos必须具有可用的公共构造函数。您可以有一个空的构造函数或一个其参数与字段匹配的构造函数(按名称和类型)。找不到字段的设置器。 我发现的例子离这个不远 关于如何解决的想法?

24
无法创建类ViewModel的实例
我正在尝试使用Android体系结构组件编写示例应用程序,但是即使尝试了几天,我仍然无法使它正常工作。它给了我上面的例外。 生命周期所有者:- public class MainActivity extends LifecycleActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = findViewById(R.id.tv_user); PostViewModel viewModel = ViewModelProviders.of(this).get(PostViewModel.class); viewModel.loadPosts(); viewModel.getPost().observe(this, new Observer<Post>() { @Override public void onChanged(@Nullable Post post) { if(post != null) { textView.setText(post.toString()); } } }); } } ViewModel:- public class PostViewModel extends …


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.