我错过了一些全局变量

时间:2016-02-02 12:52:15

标签: java android

我有2个活动和一个扩展应用程序的类,我尝试使用一种setter getter函数存储全局变量。

主要活动设定了一些观点和图表;然后调用第二个活动,该活动应该是设置值,然后在之前的图表上使用。

然后按下后退按钮并返回上一个活动onRestart,并刷新图表。

问题是我在某处丢失了我的理论全局变量。调试我意识到,当我在第二个活动中添加值时,功能完全正常,但当我返回到第一个活动时globalXCount返回' 0'再次。那是为什么?

我认为我很难理解关于生命周期的一些观点。 我附上了一些代码片段。

第一项活动:

public class MainActivity extends Activity {

Global glObj = new Global();
CombinedChart mChart;
private int itemcount;
float displayed;
private final List<String> mMonthList = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    itemcount = ((Global) this.getApplication()).getGlobalXCount();
    displayed =  itemcount/20;
    mChart = (CombinedChart) findViewById(R.id.mchart);
    populateHeaderList();
    setChartSettings();

    Intent intent = new Intent(MainActivity.this, QandA.class);
    startActivity(intent);
}

@Override
protected void onRestart() {
    super.onRestart();

    itemcount = ((Global) this.getApplication()).getGlobalXCount();
    displayed =  itemcount/20;
    populateHeaderList();
    setChartSettings();
}

第二项活动:

public class QandA extends Activity {

Global glObj = new Global();
ViewFlipper flipper;
private float lastX;

...

               }else{
                    //TODO If all information if correctly filled
                    trainedmins = et1.getText().toString();
                    localLineValue = Integer.parseInt(trainedmins) * Integer.parseInt(statusQ1);

                    //Add values to lines
                    glObj.setLineXvalues(localLineValue);

                    // TODO Add new Bar value //

                    //Add 1 more value to count
                    glObj.addGlobalXCount();

                }

...

全球课程:

public class Global extends Application {

//TODO

public Integer globalXCount;
private List<Integer> lineXvalues = new ArrayList<>();
private List<Integer> barXvalues = new ArrayList<>();

//////
public Integer getGlobalXCount() {
    if (this.globalXCount == null){
        this.globalXCount = 0;
        return this.globalXCount;
    }else{
        return this.globalXCount;
    }
}

public void addGlobalXCount() {
    if (this.globalXCount == null){
        this.globalXCount = 0;
    }else{
        this.globalXCount = this.globalXCount + 1;
    }
}

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先,在<application> - 标记内的AndroidManifest.xml中注册您的自定义应用程序上下文。

<application
  android:name="<your_package>.Global" ...>

在您的活动中访问全局应用程序上下文,如下所示:

Global glObj = (Global) getApplicationContext();
glObj.addGlobalXCount();

不要使用new创建新实例!始终通过getApplicationContext()检索实例。

此外,我建议您在活动的glObj - 方法中初始化您的班级字段onCreate()