Android程序设计错误

时间:2013-07-14 07:48:32

标签: java android coding-style

我目前正在为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);
}

3 个答案:

答案 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文件更清晰。