我目前正在为android开发一种数据库应用程序。但是,由于条目数量很少,我觉得我不需要使用Sqlite数据库。
现在,我目前使用onCreate()
方法中的保存文件进行“读取”。
但是,当我将手机从水平显示模式转为垂直显示模式时,这也会加载新文件,虽然它不会影响性能,因为我没有那么多条目,仍然困扰着我,因为我想以正确的方式做到这一点。
这样做的“正确”方法是什么?
private TableLayout tblLayout;
private ArrayList<Entry> listOfEntries;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tblLayout = new TableLayout(this);
// this basically populates my ArrayList
listOfEntries = readFromFile(saveFile);
setContentView(tblLayout);
}
答案 0 :(得分:1)
将以下内容添加到您的Activity的清单节点:(您在AndroidManifest文件中声明了活动):
android:configChanges="keyboardHidden|orientation|screenSize"
当设备旋转时,它将阻止再次调用onCreate()。这样,您将无法在方向更改时再次读取它。
然后。在您的活动中,如果您想要进行任何特定更改,则覆盖onConfigurationChanged()
方法,这会在更改方向时发生:
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
}
有许多主题可以建议您如何处理方向更改,如:
Android orientation change calls onCreate
Activity restart on rotation Android
Avoid restarting threads on orientation change
希望这会有所帮助。
答案 1 :(得分:1)
您可以使用OnCreate()
类中的Application
来加载文件。此方法只执行一次。
[代码示例]
MyApplication.java
package com.example.sunday;
import java.util.ArrayList;
import android.app.Application;
public class MyApplication extends Application {
public ArrayList<Entry> listOfEntries;
@Override
public void onCreate() {
super.onCreate();
readFromFile(savedFile);
}
//define your readFromFile(File f) somewhere here
}
MainActivity.java
package com.example.sunday;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
ArrayList<Entry> listOfEntries;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyApplication a = (MyApplication) getApplication();
listOfEntries = a.listOfEntries;
}
}
在 AndroidManifest.xml 中您必须“注册”您的MyApplication类:
<application android:name=".MyApplication"
...
...
答案 2 :(得分:0)
我认为最简单的解决方案是:
private TableLayout tblLayout;
private ArrayList<Entry> listOfEntries;
private boolean isFileLoaded = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tblLayout = new TableLayout(this);
if(!isFileLoaded){
listOfEntries = readFromFile(saveFile);
isFileLoaded = true;
}
setContentView(tblLayout);
}
但我仍然会在my first answer中使用Application类 - 它让我有机会在不同的java文件中“隐藏”readFromFile方法,使我的Activity.java文件更清晰。