从另一个活动访问实例变量 - Android开发

时间:2013-11-20 08:45:40

标签: android eclipse

我创建了一个包含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;升级

感谢您的时间

1 个答案:

答案 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&名。