我有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;
}
}
提前致谢。
答案 0 :(得分:1)
首先,在<application>
- 标记内的AndroidManifest.xml中注册您的自定义应用程序上下文。
<application
android:name="<your_package>.Global" ...>
在您的活动中访问全局应用程序上下文,如下所示:
Global glObj = (Global) getApplicationContext();
glObj.addGlobalXCount();
不要使用new
创建新实例!始终通过getApplicationContext()
检索实例。
此外,我建议您在活动的glObj
- 方法中初始化您的班级字段onCreate()
。