我创建了一个包含3个活动的程序:MainActivity,UpgradeActivity和UpgradesActivity。
主要活动包含一个计时器,它还包含一个Vehicle类的实例。
public class MainActivity extends Activity {
TextView vehicleSpeed, vehicleName, vehicleDistance, vehicleLocation,
vehicleStatus, vehicleNews, vehicleInfo, vehicleMoney;
ProgressBar vehicleFuel;
public static Vehicle vehicle;
boolean launched;
public static PartType selectedType;
Handler handler = new Handler();
我在MainActivity中有一个按钮,按下后会将我带到一个页面,我可以选择要升级的车辆部分。例如,我选择:引擎。引擎Button将我带到升级活动。在此活动中,我可以购买应在MainActivity中应用于车辆的升级。出于这个问题的目的,我们可以说它将车速设置为+3。
我的问题是如何从UpgradeActivity访问MainActivity中的车辆实例。我试过让实例静态,但是没有用。我如何获得访问权限以及如何从其他活动中更改车辆变量。
以下是我制作实例的地方:
@Override
protected void onCreate(Bundle savedInstanceState) {
this.selectedType = PartType.Antenna;
this.launched = false;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vehicle = new Vehicle();
vehicle.setupCar();
这是我在升级中访问变量的地方,它调用Vehicle类中的升级函数:
buyUp1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MainActivity.vehicle.upgradeEngine(MainActivity.vehicle.engineLvl + 1);
Intent activityChangeIntent = new Intent(UpgradesActivity.this, MainActivity.class);
UpgradesActivity.this.startActivity(activityChangeIntent);
}
});
这是车辆类中的功能:
public void upgradeEngine(int lvl) {
engineLvl += 3;
engine = parts.getEngine(lvl);
}
车辆存储一个名为EngineLvl的整数。这决定了汽车发动机的等级。每次更新引擎时,级别都会增加+3。
问题是引擎级别永远不会改变。即使我制作车辆实例和车辆STATIC中的所有变量;
MAINACTIVITY:
车辆 按钮升级活动
UPGRADESACTIVITY:
按钮升级活动
UPGRADEACTIVITY:
更改vehicle enginelvl Int 按钮返回MainActivity
主>升级和GT;升级
感谢您的时间
答案 0 :(得分:0)
很难说没有看到代码会出现什么问题,但我会建议您使用Intent附加功能在活动之间移动数据。您将需要使您的Vehicle类实现Parcelable(有一个如何在该页面上实现Parcelable的示例,以及网上无数其他人)。您将对象作为额外内容传递给启动UpgradeActivity的intent,如下所示:
Intent upgradeIntent = new Intent(this, UpgradeActivity.class);
upgradeIntent.putExtra("com.example.model.Vehicle", yourVehicleObject);
startActivityForResult(upgradeIntent, UPGRADE_CAR_REQUEST_CODE);
//UPGRADE_CAR_REQUEST_CODE is a unique private static final int
然后您可以在UpgradeActivity onCreate方法中检索它:
Intent intent = getIntent();
Vehicle vehicleFromLastActivity = intent.getParcelableExtra("com.example.model.Vehicle");
在返回MainActivity之前,您可以执行以下操作:
Intent dataIntent = new Intent();
dataIntent.putExtra("com.example.model.Vehicle", yourModifiedVehicleObject);
setResult(RESULT_OK, dataIntent);
finish();
然后最后在MainActivity中你需要处理结果,它是这样完成的:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case UPGRADE_CAR_REQUEST_CODE:
if(resultCode == android.app.Activity.RESULT_OK) {
Vehicle modifiedObject = data.getParcelableExtra("com.example.model.Vehicle");
// Now you can use that object which is coming from UpgradeActivity
}
}
}
当然,如果您的Vehicle类占用大量内存,这可能会导致问题。然后,您可以考虑通过Intent仅传递相关信息来重建UpgradeVehicle活动中的对象,例如只有id&名。