我的应用程序是元素名称的列表。单击一个将转到具有更多详细信息的另一个活动,以及一个editText和按钮以更改其名称。当我返回列表时,希望它具有新名称(如果已更新)。我的onCreate方法具有这段代码,可以完美地从数据库中填充它(忽略硬编码的大小,调试起来更简单)
final String DATABASE_NAME = "element_db";
final AppDatabase appDatabase;
appDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, DATABASE_NAME).build();
ListView list = (ListView)findViewById(R.id.listView);
final String[] element = new String[3];
new Thread(new Runnable() {
@Override
public void run() {
List<Element> elements;
elements = appDatabase.elementDao().fetchElements(); // a dao query "select*from"
int size = elements.size();
for (int i = 0; i < size; i++){
element[i] = elements.get(i).getName();
}
}
}) .start();
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.activity_list_view, R.id.textView, element);
list.setAdapter(arrayAdapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent i = new Intent(MainActivity.this, itemdetail.class);
i.putExtra("pos", position);
startActivity(i);
}
});
为了在返回此屏幕时获得更新的列表,我将上面的代码复制到onRestart方法中,但是现在数据库不返回任何内容。如果我只是将进入适配器的数组设置为{“ a”,“ a”,“ a”},则列表会很好地填充。为什么数据库只能在onCreate而不在onRestart上工作?
答案 0 :(得分:0)
我认为您可以使用ViewModel和livedata观察任何数据库更改