protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dayRecyclerView = (RecyclerView)findViewById(R.id.recycler_view);
dayRecyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
dayRecyclerView.setLayoutManager(layoutManager);
dayRecyclerViewAdapter = new DayRecyclerViewAdapter(DataUtility.getRecords());
dayRecyclerView.setAdapter(dayRecyclerViewAdapter);
}
上面的代码是应用的MainActivity。启动时,应用会根据RecyclerView
方法获得的ArrayList
数据显示DataUtility.getRecords()
。数据可能会不时更新。每当我将应用程序从后台切换回前景时,UI都会刷新。
Android 4.3-5.0
中的实施工作正常。但是,当我将应用程序部署到Android 7.0时。我发现UI不知道刷新,除非我退出应用程序并再次启动。
这里有什么问题?每当我将应用程序从后台切换到前台时,如何强制应用程序刷新?
**更新:
我试图在onResume()
上添加方法 @Override
public void onResume() {
super.onResume();
dayRecyclerViewAdapter.setDataSet(DataUtility.getRecords());
dayRecyclerViewAdapter.notifyDataSetChanged();
}
我已经检查过DataUtility.getRecords()可以打印出所有最新记录。但它没有反映在UI上。
答案 0 :(得分:3)
在Android 4.3到5上,您的活动正在销毁,然后重新创建。因此,当您回来时它反映了数据库的变化。
在Android 7上,更改不会显示,因为您可能正在测试具有足够RAM的手机,以防止系统破坏活动。因此,onCreate
方法不会被调用。
<强>解决方案:强>
检查onResume
方法中的数据库更改,如果有更改,请在更新适配器中的数据后相应地通知适配器。
答案 1 :(得分:0)
这可能是Recycler视图的适配器更新出现问题。尝试在数据更改时调用adapter.notifyDataSetChanged()
。这将刷新您的回收者视图,列表将更新
答案 2 :(得分:0)
我建议你使用LiveData
去寻找android架构组件LiveData是一个可观察的数据持有者类。与常规observable不同,LiveData是生命周期感知的,这意味着它尊重其他应用程序组件的生命周期,例如活动,片段或服务。此感知确保LiveData仅更新处于活动生命周期状态的应用程序组件观察者。
您可以点击此链接了解更多详情
按照代码段显示如何观察实时数据
public class NameActivity extends AppCompatActivity {
private NameViewModel mModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Other code to setup the activity...
// Get the ViewModel.
mModel = ViewModelProviders.of(this).get(NameViewModel.class);
// Create the observer which updates the UI.
final Observer<String> nameObserver = new Observer<String>() {
@Override
public void onChanged(@Nullable final String newName) {
// Update the UI, in this case, a TextView.
mNameTextView.setText(newName);
}
};
// Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
mModel.getCurrentName().observe(this, nameObserver);
}
}