gpt4 book ai didi

Android - 如何从 Activity 中检索数据

转载 作者:行者123 更新时间:2023-11-29 14:05:20 28 4
gpt4 key购买 nike

我是 android 新手,所以请原谅新手问题。我有一个游戏,我正试图从一个旧的 Java applet 移植到 android。我的目标是实现此功能,然后在 CodeProject 之类的网站上发布一篇文章(如果有更合适的网站,则发布一篇更好的文章)。这个想法是为了表明一个全新的 android 开发的人可以在合理的时间内创建一个应用程序。

我正在取得一些进展,但遇到了问题。我有用户与之交互的主要 Activity 。然后我创建了一个菜单项,该菜单项依次启动第二个 Activity (称为子 Activity ),其中包含适量的复选框、搜索栏等以填充参数。我可以成功地传递包含从 main 到 child 的所有选项的类。但我无法让 child 将这些数据传回主要对象。首先是启动子 Activity 的主要代码:

public void addBalls()
{
Intent myIntent = new Intent(this, GameOptions.class);

Bundle b = new Bundle();
b.putSerializable("options", gameParams);
myIntent.putExtras(b);
startActivityForResult(myIntent,STATIC_OPTIONS_VALUE);
}

传递给 child (并希望再次返回)的数据是:

public class GameOptionParams implements Serializable
{
private static final long serialVersionUID = 1L;

public int speedBarPosition;
public int vgravityBarPosition;
public int mgravityBarPosition;
public int viscosityBarPosition;
public int restititionBarPosition;
public boolean trace;
public boolean collide;
public boolean mush;
public boolean wrap;
public boolean flicker;
}

这里是预期的返回(同样在 main 中)

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode)
{
case (STATIC_OPTIONS_VALUE) :
{
if (resultCode == Activity.RESULT_OK)
{
//retrieve intended options
Bundle b = data.getExtras();
gameParams = (GameOptionParams) b.getSerializable("options");
}
break;
}
}
}

子 Activity 成功接收游戏参数数据。然后它与用户交互以更新值,然后我尝试返回它但它似乎没有被发送到 main。这是 onStop() 覆盖中的子代码。也许这段代码不应该在 onStop() 覆盖中,但我无法确定将它放在哪里。

@Override
public void onStop()
{
super.onStop();

//read widget values
gameParams.speedBarPosition = speedBar.GetPosition();
gameParams.vgravityBarPosition = vgravityBar.GetPosition();
gameParams.mgravityBarPosition = mgravityBar.GetPosition();
gameParams.viscosityBarPosition = viscosityBar.GetPosition();
gameParams.restititionBarPosition = restititionBar.GetPosition();

//todo save to persistent
Intent resultIntent = new Intent(this, TiltBall2ImpactActivity.class);
Bundle b = new Bundle();
b.putSerializable("options", gameParams);
resultIntent.putExtras(b);
setResult(Activity.RESULT_OK, resultIntent);
}

回到主要的 onActivityResult 覆盖,我总是看到 requestCode=0、resultCode=0、data=null。我认为这是一个典型的新手问题,我一直在阅读 sdk 文档、用户论坛等,并且已经接近解决方案,但还没有完全解决。任何帮助将不胜感激。

最佳答案

由于这是游戏的设置菜单,我假设您将需要这些值来进行多个 Activity 。如果是,则扩展 android.app.Application 类。

在该类中,您可以创建属性来保存您的值。在您可以调用的任何 Activity 中

MyApplication myApp = (MyApplication)getApplicationContext();

其中 myApp 是单例。因此,您将从另一个 Activity 中获取您设置的值。

您需要将此代码添加到 list 文件中的应用程序标签中才能正常工作

android:name=".MyApplication"

如果您需要为应用程序的下次启动保留这些值,则需要使用 SharedPreferences。这是一个很好的教程

http://saigeethamn.blogspot.com/2009/10/shared-preferences-android-developer.html

关于Android - 如何从 Activity 中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382506/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com