2013-07-14 4 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

Добавить следующее к вашему манифесту узла Activity в :(где вы объявили деятельность в 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

Вы можете использовать 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 вы должны «повторно 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); 
} 

, но я все равно буду использовать класс приложений, как в my first answer - это дает мне возможность„скрыть“метод readFromFile в другой файл java, делающий мой файл Activity.java более чистым.

Смежные вопросы