Android-如何从活动中检索数据
我是android新手,所以请原谅我的新手问题。我有一个游戏,我正试图从一个旧的Java小程序移植到android。我的目标是让这个功能化,然后在像CodeProject这样的网站上发布一篇文章,或者如果有更合适的网站,就发布一篇更好的文章。这个想法是为了证明一个全新的android开发人员可以在合理的时间内创建一个应用程序 我正在取得一些进展,但遇到了一个问题。我有用户与之交互的主要活动。然后我创建了一个菜单项,该菜单项依次启动第二个活动,称之为child,并使用少量复选框、seekbar等来填充参数。我可以成功地将包含所有选项的类从main传递到child。但我无法让孩子将这些数据传回主服务器。 首先,这里是启动子活动的主代码:Android-如何从活动中检索数据,android,Android,我是android新手,所以请原谅我的新手问题。我有一个游戏,我正试图从一个旧的Java小程序移植到android。我的目标是让这个功能化,然后在像CodeProject这样的网站上发布一篇文章,或者如果有更合适的网站,就发布一篇更好的文章。这个想法是为了证明一个全新的android开发人员可以在合理的时间内创建一个应用程序 我正在取得一些进展,但遇到了一个问题。我有用户与之交互的主要活动。然后我创建了一个菜单项,该菜单项依次启动第二个活动,称之为child,并使用少量复选框、seekbar等来
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);
}
传递给孩子并希望再次返回的数据是:
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;
}
这是主要的预期回报
@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;
}
}
}
子活动成功接收gameParams数据。然后它与用户交互以更新值,然后我尝试返回它,但它似乎没有被发送到main。以下是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文档、用户论坛等,并且已经接近解决方案,但还没有完全解决。如果您有任何帮助,我们将不胜感激。因为这是游戏的一种设置菜单,我想您需要为多个活动使用这些值。如果是这样,则扩展android.app.Application类 在该类中,可以创建属性来保存值。在任何活动中,您都可以调用
MyApplication myApp = (MyApplication)getApplicationContext();
其中myApp是一个单身汉。因此,您将从另一个活动中获得设置的值
您需要将此代码添加到清单文件中的应用程序标记中,以使其正常工作
android:name=".MyApplication"
如果需要在下次启动应用程序时保留这些值,则需要使用SharedReferences。这是一个很好的教程
由于这是游戏的一种设置菜单,我假设您需要为多个活动使用这些值。如果是这样,则扩展android.app.Application类 在该类中,可以创建属性来保存值。在任何活动中,您都可以调用
MyApplication myApp = (MyApplication)getApplicationContext();
其中myApp是一个单身汉。因此,您将从另一个活动中获得设置的值
您需要将此代码添加到清单文件中的应用程序标记中,以使其正常工作
android:name=".MyApplication"
如果需要在下次启动应用程序时保留这些值,则需要使用SharedReferences。这是一个很好的教程
假设在您的“子”活动中,用户必须按下“确定”或“保存”按钮,然后将代码放入按钮的onClick中设置gameParams参数。。。处理程序 使用默认构造函数实例化意图,例如
Intent resultIntent = new Intent();
…然后在创建捆绑包并向其添加gameParams并调用setResult…,只需调用finish即可终止“child”活动。我想覆盖onStop的情况不多,我怀疑您不想使用它来尝试返回意图。假设在“子”活动中,用户必须按下“确定”或“保存”按钮,然后将代码放入按钮的onClick中设置gameParams参数。。。处理程序 使用默认构造函数实例化意图,例如
Intent resultIntent = new Intent();
…然后在创建捆绑包并向其添加gameParams并调用setResult…,只需调用finish即可终止“child”活动。我想覆盖onStop的情况不多,我怀疑您不想使用它来尝试返回意图。我怀疑您需要在调用onStop之前调用setResult,即在您假定调用finish以结束活动之前。一个问题:用户如何退出第二个活动?使用“确定”按钮,或仅按“后退”按钮?相关:我怀疑您需要在调用onStop之前调用setResult,即在您假定调用finish以结束活动之前。一个问题:用户如何退出第二个活动?用“确定”按钮,或者只按“后退”按钮?相关:谢谢,我会调查这似乎是完全合理的。谢谢,我会调查这似乎是完全合理的。