我有一个类文件,它扩展了SurfaceView并实现了SurfaceHolder.Callback,它保存为myView.java
public class myView extends SurfaceView implements SurfaceHolder.Callback
现在我有另一个java文件GlobalVar.java,就像这样
import android.app.Application;
class GlobalVar extends Application {
private int touchCount;
public int getCount()
{
return touchCount;
}
public void setCount(int tCount)
{
touchCount = tCount;
}
}
在myView类(myView.java)中有一个onTouchEvent函数
@Override
public boolean onTouchEvent(MotionEvent event) {
int pointerCount = event.getPointerCount();
}
现在我想要的是将全局变量touchCount设置为pointCount。 我试过这样的
@Override
public boolean onTouchEvent(MotionEvent event) {
int pointerCount = event.getPointerCount();
GlobalVar tcount = ((GlobalVar)getApplicationWindowToken());
tcount.setCount(pointerCount);
}
这给了我错误。所以如何在myView类文件中设置全局变量值???
清单文件的应用程序部分
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MyViewActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<application android:name=".GlobalVar" android:icon="@drawable/icon" android:label="@string/app_name">
</application>
答案 0 :(得分:10)
可能你需要一个单独的类来保存你所有的变量吗?
public class GlobalVar {
public int getMyVar() {
return myVar;
}
public void setMyVar(int myVar) {
this.myVar = myVar;
}
private int myVar = 0;
private static GlobalVar instance;
static {
instance = new GlobalVar();
}
private GlobalVar() {
}
public static GlobalVar getInstance() {
return GlobalVar.instance;
}
}
使用模式:
@Override
public boolean onTouchEvent(MotionEvent event) {
int pointerCount = event.getPointerCount();
GlobalVar.getInstance().setMyVar(pointerCount);
}
答案 1 :(得分:1)
请改为尝试:
@Override
public boolean onTouchEvent(MotionEvent event) {
int pointerCount = event.getPointerCount();
GlobalVar gv = (GlobalVar) getContext.getApplicationContext();
gv.setCount(pointerCount);
}
您正在执行的操作失败,因为该方法返回的对象不是Application对象。 我还要提一下,您需要在应用程序节点中使用android:name =“GlobalVar”标记在清单中注册自定义Application类的名称。
答案 2 :(得分:1)
我建议使用SharedPreferences。
示例:
// Have a SharedPreferences class
SharedPreferences pref = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
public final static String WIFI_NAME = "WIFI_NAME";
public void setWifiName(String wifi_name) {
Editor edit = pref.edit();
edit.putString(WIFI_NAME, wifi_name);
edit.commit();
}
public String getWifiName() {
return pref.getString(WIFI_NAME, "");
}
然后,访问它:
string name = pref.getWifiName(); // GET VALUE
pref.setWifiName(name ); //SET VALUE
答案 3 :(得分:0)
变化:
getApplicationWindowToken()
为:
getApplicationContext()
答案 4 :(得分:0)
您是否应该在包含android:name
的{{1}}上设置application
属性?所以我认为你的清单应该是:
Activity
我自己没试过,但这是我尝试的第一件事。