Передача данных из нескольких действий в одно действие

Всем привет,

У меня есть приложение, которое пара одноклассников и я сделали для проекта класса. Сейчас мы продолжаем приложение, чтобы улучшить и оптимизировать его. Вот что у меня так далеко:

  • Заставка
  • HomePage
  • Отверстие 1 - 18
  • ScorePage
  • AboutPage

Главный экран Отверстие 1 - 18 Страница оценки О странице

Я почти все понял, за исключением нескольких мелочей. Проблема, над которой я сейчас работаю, заключается в следующем:

Передача данных с каждой страницы отверстия на страницу счета.

Я знаю, как передать его от страницы к странице, и я мог бы перебор, потому что так было у меня изначально, но это выглядит неаккуратно, и я хотел бы этого не делать, если это возможно.

//Code (partial)

//(From Hole 1)

@Override
public void onClick(View v)
{
    TextView tvScoreLbl = (TextView) findViewById(R.id.scoreLbl);
    tvScoreLbl.setText(String.valueOf(count));

    if(v == findViewById(R.id.btnAdd))
    {
        count++;
        tvScoreLbl.setText(String.valueOf(count));
    }
    else if(v == findViewById(R.id.btnMinus))
    {
        count--;
        tvScoreLbl.setText(String.valueOf(count));
    }
    else if(v == findViewById(R.id.btnPrev))
    {
        Intent i_prev = new Intent(Hole_01.this, HomePage.class);
        startActivity(i_prev);
    }
    else if(v == findViewById(R.id.btnNext))
    {
        Intent i_pass = new Intent(Hole_01.this, ScorePage.class);
        i_pass.putExtra("score1", tvScoreLbl.getText().toString());
        Intent i_next = new Intent(Hole_01.this, Hole_02.class);
        startActivity(i_next);
    }


//(From ScorePage)

String score;
TextView tvScore1 = (TextView) findViewById(R.id.tvScore1);

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.scorepage);

    Button btnHome = (Button) findViewById(R.id.btnHome);
    btnHome.setOnClickListener(this);

    score = getIntent().getExtras().getString("score1");
    tvScore1.setText(score);
}

Заранее спасибо.

3 ответа

Решение

Лучший ответ зависит от того, как долго вам нужны ваши данные для сохранения.

Если вам необходимо сохранить его в течение длительного периода времени (дни / недели), сохраните данные во внутреннем или внешнем хранилище с помощью SQLite или создайте пользовательский объект, который представляет все данные из "дырочной страницы", и сериализуйте этот объект. и запишите это на диск.

Если вам не нужны данные для сохранения, я бы поступил так, как вы сейчас делаете, и продолжу передавать данные в том виде, в каком вы есть, из Активности в Активность. Это может показаться вам "неаккуратным", но именно так вы должны передавать данные между операциями.

Возможно, создание объекта для данных, которые вы хотите передать, и реализация в нем интерфейса Parcelable сделают его менее "небрежным" в ваших глазах. Вот ссылка на учебник для Parcelable объектов.

Другой вариант - использовать глобальный контекст приложения, как уже предлагалось, НО предупредить, что это связано с большой проблемой - если приложение убивается в фоновом режиме, любые данные, хранящиеся в классе Application, теряются, поэтому вам придется учитывать это событие.,

БД избыточна, если вы храните лишь небольшую часть информации, контекст приложения потеряет данные, если приложение будет убито ОС.

Поэтому, если вы хотите сохранить данные в течение некоторого периода времени, используйте сериализацию для записи объекта (если это всего лишь оценка, тогда простой файл File IO сделает эту работу без необходимости сериализации). Или, если вам нужно, чтобы оно сохранялось только во время работы приложения (передний план или фон), передайте данные между операциями.

Держите все состояние в классе приложения.

Напишите ему по мере необходимости, из любой деятельности.

Читайте из него в ScorePage Деятельность.

Более подробная информация и пример доступны здесь: ( Использование класса приложения Android для сохранения данных)

Вместо того, чтобы передавать данные между всеми вашими намерениями с помощью putExtra, почему бы не использовать небольшую базу данных SQLite для хранения результатов каждого действия, которые мог прочитать экран счета.

SQLite Docs

Android Notepad Tutorial также хорош для примера SQLite

Другие вопросы по тегам