0

大家好,

    我有一个应用程序,几个同学和我为一个班级项目做的。我们现在正在继续使用该应用程序来改进和简化它。这是我到目前为止所拥有的:

  • 闪屏
  • 主页
  • 洞 1 - 18
  • 分数页
  • 关于页面

主屏幕孔 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);
}

提前致谢。

4

3 回答 3

0

与其使用 putExtra 在所有 Intent 之间传递数据,不如使用一个小的 SQLite DB 来存储分数屏幕可以读取的每个活动的结果。

SQLite 文档

Android 记事本教程也适用于 SQLite 示例

于 2013-06-07T14:11:52.350 回答
0

将所有状态保存在应用程序类中。

从任何活动中根据需要写入它。

ScorePage在Activity中读取它。

此处提供更多详细信息和示例:(使用 Android 应用程序类来持久化数据

于 2013-06-07T14:12:18.043 回答
0

最佳答案取决于您需要将数据保留多长时间。

如果您需要它在很长一段时间(几天/几周)内持续存在,则使用 SQLite 将数据存储到内部或外部存储中,或者创建一个自定义对象来表示“孔页”中的所有数据并序列化该对象并将其写入磁盘。

如果您不需要保留数据,那么我会像您现在一样继续按原样传递数据,从 Activity 到 Activity。这对您来说可能看起来“草率”,但这是您应该在活动之间传递数据的方式。

也许为您想要传递的数据创建一个对象并让它实现 Parcelable 接口会使其在您眼中不那么“草率”。这是Parcelable 对象教程的链接。

另一种选择是使用已经建议的全局应用程序上下文,但请注意它会带来一个大问题 - 如果应用程序在后台被杀死,那么存储在应用程序类中的任何数据都会丢失,所以你必须考虑到这种情况的发生.

如果您只存储少量信息,则数据库过多,如果应用程序被操作系统杀死,应用程序上下文将丢失数据。

因此,如果您想将数据保留一段时间,请使用序列化来写入对象(如果只是分数,那么简单的 File IO 东西就可以完成这项工作,而无需序列化)。或者,如果您只需要它在应用程序运行时(前台或后台)持续存在,则在活动之间传递数据。

于 2013-06-07T14:56:33.443 回答