Форма Android как действие - PullRequest
       0

Форма Android как действие

0 голосов
/ 30 ноября 2010

У меня есть приложение с несколькими действиями.В основном классе я открываю базу данных и создаю список содержимого следующим образом:

public class MyApplication extends Activity
{
    private List<PhoneNumber> numberList;

    public void onCreate(Bundle savedInstanceState)
    {
        ...
        numberList = new ArrayList<PhoneNumber>();
        ...
        loadDatabase()
        ...
    }

    private void loadDatabase()
    {
        // File IO and parsing stuff
        addNumber(thisNumber);   // executes for each entry
    }

    public void addNumber(PhoneNumber thisNumber)
    {
        numberList.add(thisNumber);
    }
}

Это работает нормально, и у меня есть ListView в основном действии, которое заполнено этими данными.Теперь перейдем к следующему шагу.Я пытаюсь запустить форму как новое действие, которое добавит запись в этот список.Упражнение начинается отлично, и я легко смог создать форму.Проблема заключается в доступе к списку для добавления в него.

public class AddNumber extends Activity
{
    ...
    // This function is called from the done button
    // <Button android:text="Done" android:onClick="formDone"/>
    public void formDone(View v)
    {
        // findViewByIds here to get data from form. 
        // This is done correctly and I can see my data in memory

        MyApplication access = new MyApplication();
        PhoneNumber newNumber = new PhoneNumber();

        // Fill newNumber object with data from form. Done correctly. Verified

        access.addNumber(newNumber);
    }

Последняя строка formDone() выполняется правильно.Через отладку я могу перейти к классу Application, и он выполняет addNumber().Перед выполнением numberList.add(thisNumber); я могу посмотреть содержимое памяти для объекта thisNumber, который он пытается добавить в список, и эти данные верны.Попытка выполнить эту строку, хотя вылетает приложение в стандартном формате Android.(Загружает View.class с помощью «Source not found», за которым следует ZygoteInit $ MethodBlahBlah).

Так что я немного запутался, потому что похоже, что данные, подаваемые в addNumber(), верны, и функция работаетсовершенно нормально, когда приложение запускается впервые путем построения списка из данных в базе данных.По сути, я думаю об этом правильно?Должна ли такая форма быть ее собственной деятельностью или есть лучший способ сделать это?Если это может быть его собственная деятельность, что я делаю не так?

Спасибо,
Nate

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Почему так работать? Я думаю, что лучше использовать startActivityForResult вместо startActivity из вашего MyApplication класса.

https://developer.android.com/reference/android/app/Activity.html

Лучше использовать его таким образом, потому что, кто знает, по причинам памяти, ваша начальная активность может быть разрушена, чтобы впоследствии быть восстановлена, и что тогда произойдет с вашим обратным вызовом? Не стоит недооценивать силу намерений.

1 голос
/ 30 ноября 2010

Как указал Фальмарри, создание экземпляра класса Application или Activity напрямую недопустимо.

Вместо этого у вас есть два основных варианта связи между операциями.

  1. Передача информации через намерение.Добавьте список телефонных номеров в качестве дополнительного к цели, которая запускает AddNumber, и верните измененный список, когда вы закончите.

  2. Сохранение информации в пользовательском приложении.Расширьте класс Application (выберите его в качестве класса Application в манифесте).Храните свой список номеров там.Вы можете получить доступ к классу Application из любого Activity через getApplication ().Просто приведите его к своему классу Application и получите доступ к методу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...