밑 소스 에서 처럼 버튼을 네개 만들어주어
백버튼과 포워드버튼을 구현하였습니다
그런데 그 버튼을 뒤로 갈곳이 있거나 앞으로 갈곳이 있으면
버튼을 활성화 시켜주고 아니면 비활성화를 시켜주고 싶습니다
ImageButton으로 두가지 상황을 구분하여 이미지를 적용시킬려고 하는데
canGoBack(); , canGoFoward(); 으로 boolean값을 리턴하여 알아낼수 있더라구요
헌데 그위치를 어디에다가 두어야 boolean값을 제대로 리턴 할지 모르겠습니다
private class Callback extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
System.out.println("myWebView.canGoBack() : "+myWebView.canGoBack());
System.out.println("myWebView.canGoForward() : "+myWebView.canGoForward());
return (true);
}
}
Callback함수에 위치 시켜주었더니 한번 클릭 했을때는 둘다 false로 나오고
두번째 클릭했을때 돌아갈곳이 있다고 canGoBack() 이 true가 나오더라고요
그리고 goBack() 을 하여 이전페이지로 가게 되면 다시
canGoBack(); , canGoFoward(); 이 두함수가 boolean을 리턴을 안합니다 ㅠㅠ
다른 무언가가 있는건가요?? 답변 부탁드리겠습니다
=============================================================소스첨부
public class mNaver extends Activity {
Context c = this;
private WebView myWebView;
final private String DEFAULT_URL = "http://m.naver.com/";
InitDatabase idb = InitDatabase.getInstance();
Button back;
Button foward;
Button refresh;
Button home;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mobile_renaultsamsung);
back = (Button) findViewById(R.id.back);
foward = (Button) findViewById(R.id.foward);
refresh = (Button) findViewById(R.id.refresh);
home = (Button) findViewById(R.id.home);
myWebView = (WebView) this.findViewById(R.id.webview);
WaitThread wThread = new WaitThread(mNaver.this);
wThread.start();
// new added
// FrameLayout mContentView = (FrameLayout) getWindow().getDecorView()
// .findViewById(android.R.id.content);
// final View zoom = this.myWebView.getZoomControls();
// mContentView.addView(zoom, ZOOM_PARAMS);
// zoom.setVisibility(View.GONE);
myWebView.setWebViewClient(new Callback());
this.myWebView.loadUrl(DEFAULT_URL);
try {
Thread.sleep(800);
} catch (Exception e) {
e.printStackTrace();
}
WaitThread.stop(wThread);
back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myWebView.goBack();
}
});
foward.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myWebView.goForward();
}
});
home.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
onBackPressed();
}
});
refresh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myWebView.reload();
}
});
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
}
// new added
private class Callback extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
System.out.println("myWebView.canGoBack() : "+myWebView.canGoBack());
System.out.println("myWebView.canGoForward() : "+myWebView.canGoForward());
return (true);
}
}
}
/**
* ProgressDialog Thread
*/
class WaitThread extends Thread {
Context context;
String title = "";
String msg = "Loding...";
ProgressDialog progress;
Looper mLoop;
WaitThread(Context _context) {
context = _context;
setDaemon(true);
}
public void run() {
Looper.prepare();
progress = new ProgressDialog(context);
progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progress.setTitle(title);
progress.setMessage(msg);
progress.setCancelable(false);
progress.show();
mLoop = Looper.myLooper();
mLoop.loop();
}
static void stop(WaitThread wThread) {
wThread.progress.dismiss();
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
wThread.mLoop.quit();
}
}
if(webview.canGoBackOrForward(-2) == false){
finish();
}else if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
답변이 맞는지는 모르겠지만.. 웹뷰를 만들면서
conGoBack()을 해도 첫페이지이면 백버튼을 누르면 false가 나와야 하는데 계속 true가 나오고
종료가 false가 안나오니 finish 루틴을 못타더군요...
그래서 위처럼 canGoBackOrForward(-2)를 숫자값을 바꾸어가면서 찍어보니 -2가 false 떠서 하니 정상적으로 다 되더군요
서버는 jsp였습니다.. 참고하세요
기준은 잘 모르겠지만