所以我遇到了一个有趣的问题,我不确定如何继续。
我正在编写的应用程序的主题会根据用户所处的状态而变化。为了实现这一点并在应用程序关闭期间保持状态,我将状态存储在sharedPreferences中并将其检索到onCreate()
方法,然后在setTheme(R.style.myTheme)
调用之前调用super.onCreate()
,据我所知,这是在不重新启动整个活动的情况下动态设置活动主题的唯一方法。< / p>
我现在想要将状态变量存储在Firebase中并在运行时检索它以相应地更新主题。这样,用户可以在不同的设备上打开应用程序,登录并正确地设置界面。到目前为止,我从firebase检索数据的方法是在需要访问Firebase数据并从DatabaseCallback
调用方法的每个类上实现一个名为DatabaseCallback
的接口,以通知类它需要的数据可用。
以下是一个例子:
public void getUserByUid(String uid, final DatabaseCallback c) {
DatabaseReference userRef = db.getReference("users/" + uid);
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
c.onGetUser(dataSnapshot.getValue(User.class));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
这就是出现问题的地方。当我在getUserByUid()
中调用onCreate()
方法时,在 onCreate()
完成后阻止我无法更新主题时,才会进行回调。有关更好地实现获取数据的想法/更新主题的不同方式没有重新启动活动吗?
答案 0 :(得分:0)
将您的firebase侦听器移动到intent服务或Async任务中,然后将其保存到sharedPreferences,然后您可以按离键加载方式更改主题。