Доступ к глобальным переменным в Android - PullRequest
1 голос
/ 29 января 2011

У меня есть файл класса, который расширяет 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 ]

10 голосов
/ 29 января 2011

Может быть, вам понадобится какой-нибудь одноэлементный класс, который будет содержать все ваши переменные?

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 голос
/ 03 июня 2015

Я бы порекомендовал использовать 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
1 голос
/ 29 января 2011

Попробуйте вместо этого:

    @Override
public boolean onTouchEvent(MotionEvent event) {
   int pointerCount = event.getPointerCount();
   GlobalVar gv = (GlobalVar) getContext.getApplicationContext();
   gv.setCount(pointerCount);
   }

То, что вы делаете, терпит неудачу, потому что объект, возвращаемый этим методом, не является объектом Application. Я также должен упомянуть, что вам необходимо зарегистрировать имя вашего пользовательского класса Application в манифесте, используя тег android: name = "GlobalVar" в вашем узле Application.

0 голосов
/ 30 января 2011

Разве вы не должны установить атрибут android:name на application, который содержит ваш Activity?Поэтому я думаю, что ваш манифест должен быть:

<application android:name=".GlobalVar" 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>

Я сам не пробовал, но это первое, что я попробую.

0 голосов
/ 29 января 2011

Изменение:

getApplicationWindowToken()

на:

getApplicationContext()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...