我有两个活动
活动
活动
列表活动
显示项目列表,单击列表中的项目时显示详细信息活动
。在列表活动
中,我们观察从数据库获取提要的情况,一旦我们这样做了,我们就更新了用户界面。
列表页
feedViewModel.getFeeds().observe(this, Observer { feeds ->
feeds?.apply {
feedAdapter.swap(feeds)
feedAdapter.notifyDataSetChanged()
}
})
现在我们有了一个DetailActivity
页面,该页面更新了提要(项目),并且Activity
已经完成,但是更改没有反映在ListActivity
中。
详细信息页面
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
feedViewModel.setFeedId(id)
feedViewModel.updateFeed()
}
提要视图模型
class FeedViewModel(application: Application) : AndroidViewModel(application) {
private val feedRepository = FeedRepository(FeedService.create(getToken(getApplication())),
DatabaseCreator(application).database.feedDao())
/**
* Holds the id of the feed
*/
private val feedId: MutableLiveData<Long> = MutableLiveData()
/**
* Complete list of feeds
*/
private var feeds: LiveData<Resource<List<Feed>>> = MutableLiveData()
/**
* Particular feed based upon the live feed id
*/
private var feed: LiveData<Resource<Feed>>
init {
feeds = feedRepository.feeds
feed = Transformations.switchMap(feedId) { id ->
feedRepository.getFeed(id)
}
}
/**
* Get list of feeds
*/
fun getFeeds() = feeds
fun setFeedId(id: Long) {
feedId.value = id
}
/**
* Update the feed
*/
fun updateFeed() {
feedRepository.updateFeed()
}
/**
* Get feed based upon the feed id
*/
fun getFeed(): LiveData<Resource<Feed>> {
return feed
}
}
为了简单起见,已经抽象了一些代码。如果需要,我可以添加它们来跟踪问题
我也有同样的问题。在下面的代码中,我忘记了一行,单例不起作用(问题与主要答案相同)。
@Database(entities = [SleepNight::class], version = 1, exportSchema = false)
abstract class SleepDatabase : RoomDatabase() {
abstract val sleepDatabaseDao: SleepDatabaseDao
companion object {
@Volatile
private var INSTANCE: SleepDatabase? = null
fun getInstance(context: Context): SleepDatabase {
synchronized(this) {
var instance = INSTANCE
if (instance == null) {
instance = Room.databaseBuilder(
context.applicationContext,
SleepDatabase::class.java,
"sleep_history_database"
)
.fallbackToDestructiveMigration()
.build()
INSTANCE = instance
}
return instance
}
}
}
}
遗忘的台词:
INSTANCE = instance
我在同一实体的多个活动中面临着同样的问题。对我来说,将Room数据库实例作为一个单独的实例进行编码是很有用的,比如:这个(步骤5)
例子:
public abstract class MyDatabase extends RoomDatabase {
private static MyDatabase mMyDatabase;
public static MyDatabase getInstance(Context context) {
if(mMyDatabase==null){
mMyDatabase = Room.databaseBuilder(context.getApplicationContext(), MyDatabase.class, "app_database").build();
return mMyDatabase;
}
}
}
在您拥有的每个ViewModel中(类从AndroidViewModel扩展为Context参数):
public MyViewModel(@NonNull Application application) {
super(application);
mMyDatabase = MyDatabase.getInstance(application.getApplicationContext());
}
现在,在我的例子中,每次我在配置活动中编辑一个值,它都会反映在其他活动中。
希望这有帮助。
经过大量的调查和一些想法,从这个答案从另一个问题。我解决了这个问题。
问题
database.feed没有创建数据库的单例实例,因为第一个活动有另一个实例,其中LiveData监听更改,而第二个活动有另一个实例,在更新数据后,回调被忽略。
解决方案
使用Dagger或任何其他依赖注入来确保只创建DB和DAO的单个实例。
我目前正在做一个项目,我需要帮助。 我想发送的名称,总数量和总价的一个产品的数量在我的添加到购物车活动。 @override public void onListClick(final ItemInfo item){ 上面应该有什么代码发送到购物车活动?? toast.maketext(mainactivity.this,“added To cart”,toast.length_short).sh
我尝试使用 如有任何帮助,不胜感激,谢谢。
我想把意图转移到Xamarin.Android中的另一个活动。基本上,我需要Intent.data和Intent.clipdata到另一个活动,所以我使用下面的代码来传输Intent,但我不知道检索它的正确方法。 下面是Main Activity中的代码 在第二活动中 如何在第二个活动中检索意图?
我试图将图像从一个活动发送到另一个活动,但我不知道如何设置ImageView。
问题内容: 听起来很简单,但我无法使其正常工作。我有两个活动。第一个是表单,第二个是根据在第一个活动中输入的值显示JSON文件中的数据。 因此,我正在尝试制作一个简单的版本。我有一个EditText和一个按钮,因此当他们按下按钮时,EditText中的内容将出现在下一个活动的TextView中。 到目前为止,这是我的代码: 主要活动 主要XML 第二次活动 第二个XML 通过这种方式,我为Edit
问题内容: 我对android非常陌生,我正在尝试将用户输入的数据(他们的名字)发送到另一个活动。过去,我可以使用Intent在活动之间发送单行代码,但是我无法解决如何向两个不同的TextView发送两个不同的字符串。 这是到目前为止我的MainActivity代码: 我第二项活动MainGame的代码: 当我运行它时,我得到了两个TextView中都为“ name2”添加的内容。我需要做些什么来