I am inserting the following lines (from pskink post 3-2-14) into my popup Android activity file. This is being placed in the onCreate()
in an already working project. Android Studio wants me to declare the following 3 as either local variable, a parameter or a field. The 3 are: mPopup
, mCurrentX
and mCurrentY
. If I just do the trial-and-error method, trying one at a time, that might work, eh? Or any ideas about how to tell which to use?
- If I select 'local', AS changes mPopup to 'PopupWindow'.
- If I select 'parameter, AS asks about refactoring.
Here is the code:
final View cv = new View(this);
setContentView(cv);
TextView tv = new TextView(this);
tv.setBackgroundColor(0xffeeeeee);
tv.setTextColor(0xff000000);
tv.setTextSize(24);
tv.setText("click me\nthen drag me");
tv.setPadding(8, 8, 8, 8);
mPopup = new PopupWindow(tv, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
OnTouchListener otl = new OnTouchListener() {
private float mDx;
private float mDy;
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
mDx = mCurrentX - event.getRawX();
mDy = mCurrentY - event.getRawY();
} else
if (action == MotionEvent.ACTION_MOVE) {
mCurrentX = (int) (event.getRawX() + mDx);
mCurrentY = (int) (event.getRawY() + mDy);
mPopup.update(mCurrentX, mCurrentY, -1, -1);
}
return true;
}
};
tv.setOnTouchListener(otl);
mCurrentX = 20;
mCurrentY = 50;
cv.post(new Runnable() {
@Override
public void run() {
mPopup.showAtLocation(cv, Gravity.NO_GRAVITY, mCurrentX, mCurrentY);
}
});
By convention, variables beginning with "m" are member variables (class fields), not local variables. In this case that looks correct because they need to have a lifetime outside of these methods.