2013-07-14 46 views
1

我目前正在爲android開發一種數據庫應用程序。但是,由於條目數量很低,我不覺得我需要使用Sqlite數據庫。 現在,我目前有onCreate()方法中保存文件的「讀取」。 但是,當我將手機從水平顯示模式切換到垂直顯示模式時,這也會加載新文件,雖然它不會以很大的方式影響性能,但因爲我沒有那麼多條目,所以仍然困擾我,因爲我希望以正確的方式做到這一點。Android程序設計錯誤

這樣做的「正確」方法是什麼?

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); 
} 

回答

1
以下到

添加您在您的活動的清單節點:(你到哪兒去宣佈在AndroidManifest文件中的活動):

android:configChanges="keyboardHidden|orientation|screenSize" 

這將防止再次調用的onCreate()時,設備旋轉。通過這種方式,您可以防止再次閱讀方向更改。

然後。在您的活動,如果你重寫方法,如果你想進行任何具體的變化,這應該改變方向發生:

@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

希望這有助於。

+0

輝煌,謝謝!但是,您提供的覆蓋'onConfigurationChanged()'不會執行任何操作,因此可以省略它。 –

1

您可以使用Application類的OnCreate()來加載文件。該方法只執行一次。

[代碼示例]

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中你要「重gister」你的所有MyApplication類:

<application android:name=".MyApplication" 
... 
... 
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); 
} 

,但我仍然會使用Application類作爲my first answer - 它給了我機會,‘隱藏’readFromFile方法一個不同的java文件,使我的Activity.java文件更清潔。