Android 扩展应用程序以全局共享变量
我正在尝试使用此处介绍的方案,在应用程序中的各种活动中共享两个ArrayList: 下面是我的应用程序子类:Android 扩展应用程序以全局共享变量,android,global-variables,Android,Global Variables,我正在尝试使用此处介绍的方案,在应用程序中的各种活动中共享两个ArrayList: 下面是我的应用程序子类: public class GlobalVars extends Application{ ArrayList<Player> players = new ArrayList<Player>(); ArrayList<String> playerNames = new ArrayList<String>(); public Ar
public class GlobalVars extends Application{
ArrayList<Player> players = new ArrayList<Player>();
ArrayList<String> playerNames = new ArrayList<String>();
public ArrayList<Player> getPlayers(){
return players;
}
public ArrayList<String> getPlayerNames(){
return playerNames;
}
public void setPlayers(ArrayList<Player> p){
players = p;
}
public void setPlayerNames(ArrayList<String> pn){
playerNames = pn;
}
}
访问这些变量。我定义gv的第一行抛出一个classcastexception。有人知道为什么吗
以下是我添加到清单中的代码:
<application android:name="com.myname.GlobalVars"
android:icon="@drawable/icon"
android:label="@string/app_name"></application>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myname.bpstattracker" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".BPStatTracker" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".BPSTAdd"></activity>
<activity android:name=".OneOrThree"></activity>
<activity android:name=".SixOrTen"></activity>
</application>
<application android:name="com.myname.GlobalVars"
android:icon="@drawable/icon" android:label="@string/app_name">
</application>
</manifest>
编辑:为了澄清,以下是我的全部清单:
<application android:name="com.myname.GlobalVars"
android:icon="@drawable/icon"
android:label="@string/app_name"></application>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myname.bpstattracker" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".BPStatTracker" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".BPSTAdd"></activity>
<activity android:name=".OneOrThree"></activity>
<activity android:name=".SixOrTen"></activity>
</application>
<application android:name="com.myname.GlobalVars"
android:icon="@drawable/icon" android:label="@string/app_name">
</application>
</manifest>
您应该在活动或服务中调用
getApplication()
:
GlobalVars gv = (GlobalVars)getApplication();
编辑:
在清单中定义了两次
。要详细说明Peter K的答案,不需要为派生的应用程序类创建第二个
部分。您只需使用android:name
标记对现有的
部分进行修改,即可“重命名”该部分。我还想指出的是,完全限定的类名是必需的(正如您所做的那样……我通过艰难的方式发现了这一点)
要清楚
<application
android:allowBackup="true"
android:icon="@drawable/icon_app"
android:label="@string/app_title"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
因此,最终结果将是:
<application
android:name="com.XXXXXX.data.DataStore" *<-- class that extends Application and has global variables with exact package and class name*
android:allowBackup="true"
android:icon="@drawable/icon_app"
android:label="@string/app_title"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
您在清单中定义了两次
。第一个应用程序标记及其内部的所有内容都是由Eclipse自动生成的。如果我更改第一个应用程序,给它一个新的名称/标签/图标,它不会完全破坏我的程序运行方式吗?更改名称/标签/图标不会“破坏程序运行方式”。有时你需要在清单中的几个地方实现它:这就是诀窍,有趣的是,有这么多人在问这个问题,而这是唯一一个truley clear awnser。谢谢你,巴尼科
<application
android:name="com.XXXXXX.data.DataStore" *<-- class that extends Application and has global variables with exact package and class name*
android:allowBackup="true"
android:icon="@drawable/icon_app"
android:label="@string/app_title"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >