안녕하세요? ^^*
음 제가 지금 하고싶은건 터치 리스너를사용해서 왼쪽에서 오른쪽으로 스윙하면
아래 빨간색으로 된 current변수(앞Activity에서 불러온 startblk을 current변수로 재저장, 현재 값을 기억하기위한..)
current변수가 +1되면서 현 Activity를 재생성해, current변수를 재 Display해주거나
오른쪽에서 왼쪽으로 스윙하면,
current변수가 -1이 되면서 현 Activity를 재생성해, current변수를 재 Display해주게 만드려고 합니다.
위의문제가 Ctrl+F11을 눌렀을때는 화면 전환이 되면서 Activity가 재생성이 되므로, 값이 바뀌는 것을확인했습니다만......
그래서
Activity재생성을 위한 Intent(주황색으로 주석처리된 부분)를 추가하니 에러가 떠서요..ㅠㅠㅠㅠ
NullPointerException이라는 에러가 뜹니다..
어떻게 해야 current값을 저장해오면서, 현 Activity를 재 생성할수 있을까요??
______________________________________________________________________________
public class elec_normal_read_mblock_display9 extends Activity implements OnGestureListener{
int current;
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureScanner;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
int startblk = intent.getIntExtra("startblkvalue",0); //이전 Activity에서 값 받아오기.
gestureScanner = new GestureDetector(this);
if(savedInstanceState == null){ //이게 처음으로 열린 Activity라면, startblk값을 current로 저장.
current = startblk;
}
else{ //처음으로 열린 Activity가 아니라면, Activity 재 생성전에 저장된 current값을 불러옴.
current = savedInstanceState.getInt("currentvalue");
}
setContentView(R.layout.elec_normal_read_mblock_display9);
Button Sector_display = (Button)findViewById(R.id.button0); //Sector Display.
Sector_display.setText(""+startblk);
@Override
public boolean onTouchEvent(MotionEvent me) {
return gestureScanner.onTouchEvent(me);
}
public boolean onDown(MotionEvent e) {
//viewA.setText("-" + "DOWN" + "-");
return true;
}
//왼쪽에서 오른쪽으로 드래그시,,,current값 +1, 오른쪽에서 왼쪽으로 드래그시. current값 -1
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(getApplicationContext(), "Left Swipe",
Toast.LENGTH_SHORT).show();
current--;
}
// left to right swipe
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(getApplicationContext(), "Right Swipe",
Toast.LENGTH_SHORT).show();
current++;
}
}
catch (Exception e) {
}
//finish();
// startActivity(new Intent(this, elec_normal_read_mblock_display9.class));
or
// Intent intent1= new Intent(this, elec_normal_read_mblock_display9.class);
//startActivity(intent1);
return true;
}
public void onLongPress(MotionEvent e) {
Toast mToast = Toast.makeText(getApplicationContext(), "Long Press", Toast.LENGTH_SHORT);
mToast.show();
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// viewA.setText("-" + "SCROLL" + "-");
return true;
}
public void onShowPress(MotionEvent e) {
// viewA.setText("-" + "SHOW PRESS" + "-");
}
public boolean onSingleTapUp(MotionEvent e) {
Toast mToast = Toast.makeText(getApplicationContext(), "Single Tap", Toast.LENGTH_SHORT);
mToast.show();
return true;
}
public void onSaveInstanceState(Bundle outState){
outState.putInt("currentvalue",current); //Activity가 종료되기 전에 현재 current값을 저장.
}
}




1. Intent 에 Context 를 쓸때는 this 를 가급적 피하고 클래스명.this 로 해주세요
위의 경우에는 elec_normal_read_mblock_display9.this 겠죠?
2. refresh 를 생각하신다면 Intent.addFlag(Intent.FLAG_SINGLE_TOP...뭐시깽이) 여튼 이걸 해주셔야 합니다.