在Android中访问全局变量

时间:2011-01-29 17:16:14

标签: android global-variables

我有一个类文件,它扩展了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>

5 个答案:

答案 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

我自己没试过,但这是我尝试的第一件事。