Этого фрагмент кода в классе CircleView простираться Просмотрамикак сделать андроид ручкой статической при использовании локальных нон статических переменного класса в handleMessage
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
if (curAng > 0 && curTime > 0) // this is non static varriable in class
{
curAng = curAng - (2 * Math.PI)/360;
}
else
{
curAng = 0; // this is non static variable in class
task.cancel(); // this is non static variable in class
}
invalidate();
}
};
Я пытался парой решения от StackOverflow, но ничего не работает для меня. Пример ниже
static class MyInnerHandler extends Handler{
WeakReference<CircleView> mFrag;
MyInnerHandler(CircleView aview) {
mFrag = new WeakReference<CircleView>(aview);
}
@Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
if (curAng > 0 && curTime > 0) // this is non static variable in class
{
curAng = curAng - (2 * Math.PI)/360;
}
else
{
curAng = 0; // this is non static variable in class
task.cancel(); // this is non static variable in class
}
invalidate();
}
}
MyInnerHandler myHandler = new MyInnerHandler(this);
Проблемы, если я следовать этому коду выше я получаю ошибку, не статическое поле не могу ссылаться на статическую context.And я не хочу, чтобы изменить личные переменные статичен. Пожалуйста, помогите Спасибо. (Примечание: - Я также использую handler.obtainMessage().sendToTarget();
где-то в своем коде).
Наконец, я нашел решение о том, как получить доступ к переменным класса, не делая их статическими.
Вот ответ: -
static class MyInnerHandler extends Handler{
WeakReference<CircleView> mFrag;
MyInnerHandler(CircleView aview) {
mFrag = new WeakReference<CircleView>(aview);
}
@Override
public void handleMessage(Message msg)
{
CircleView aview = mFrag.get(); // Here is solution. with aview. can access all method and variables.
super.handleMessage(msg);
if (aview.curAng > 0 && aview.curTime > 0) // this is non static varriable in class
{
aview.curAng = curAng - (2 * Math.PI)/360;
}
else
{
aview.curAng = 0; // this is non static variable in class
aview.task.cancel(); // this is non static variable in class
}
aview.invalidate();
}
}
MyInnerHandler myHandler = new MyInnerHandler(this);
Почему создание 'MyInnerHandler' класса' static'? –
Поскольку андроид-студия дает это предупреждение -> класс обработчика должен быть статичным или может возникнуть утечка –