请保持温和,我是Java的新手,但我真的很想学习。我这里有一个简单的应用程序(实验),带有webview和三个按钮。每个按钮都会将另一个地址加载到webview中。
正如您在每个按钮上看到的那样,在“View.OnClickListener()”之后,我一次又一次地引用“myWebView”变量,但没有这个,我得到“myWebView无法解析”的错误消息。我确信这不是正确的方法:D
如何从“setOnClickListener”函数中访问上述类中创建的“myWebView”变量?
谢谢!
package com.example.cinemagrandmall;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
myWebView.setWebChromeClient(new WebChromeClient());
myWebView.loadUrl("http://edmondvarga.com/testing_app/home.html");
myWebView.getSettings().setJavaScriptEnabled(true);
Buttons();
}
private void Buttons() {
Button home = (Button) findViewById(R.id.home_btn);
Button rezervari = (Button) findViewById(R.id.rezervari_btn);
Button locatie = (Button) findViewById(R.id.locatie_btn);
home.setOnClickListener(new View.OnClickListener() {
WebView myWebView = (WebView) findViewById(R.id.webview);
@Override
public void onClick(View v) {
myWebView.loadUrl("http://edmondvarga.com/testing_app/home.html");
}
});
rezervari.setOnClickListener(new View.OnClickListener() {
WebView myWebView = (WebView) findViewById(R.id.webview);
@Override
public void onClick(View v) {
myWebView.loadUrl("http://edmondvarga.com/testing_app/rezervari.html");
}
});
locatie.setOnClickListener(new View.OnClickListener() {
WebView myWebView = (WebView) findViewById(R.id.webview);
@Override
public void onClick(View v) {
myWebView.loadUrl("http://edmondvarga.com/testing_app/locatie.html");
}
});
}
}
答案 0 :(得分:1)
使myWebView
成为MainActivity
类的成员。
public class MainActivity extends Activity {
WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView= (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
myWebView.setWebChromeClient(new WebChromeClient());
myWebView.loadUrl("http://edmondvarga.com/testing_app/home.html");
myWebView.getSettings().setJavaScriptEnabled(true);
Buttons();
}
private void Buttons() {
Button home = (Button) findViewById(R.id.home_btn);
Button rezervari = (Button) findViewById(R.id.rezervari_btn);
Button locatie = (Button) findViewById(R.id.locatie_btn);
home.setOnClickListener(new View.OnClickListener() {
WebView myWebView = (WebView) findViewById(R.id.webview);
@Override
public void onClick(View v) {
myWebView.loadUrl("http://edmondvarga.com/testing_app/home.html");
}
});
rezervari.setOnClickListener(new View.OnClickListener() {
WebView myWebView = (WebView) findViewById(R.id.webview);
@Override
public void onClick(View v) {
myWebView.loadUrl("http://edmondvarga.com/testing_app/rezervari.html");
}
});
locatie.setOnClickListener(new View.OnClickListener() {
WebView myWebView = (WebView) findViewById(R.id.webview);
@Override
public void onClick(View v) {
myWebView.loadUrl("http://edmondvarga.com/testing_app/locatie.html");
}
});
}
}
答案 1 :(得分:1)
为您的类创建一个新字段,以便您可以重复使用它。
public class MainActivity extends Activity {
private WebView myWebView = (WebView) findViewById(R.id.webview);
// now you can use myWebView anywhere in your methods
// without having to redefine it every time
}
答案 2 :(得分:1)
您可以为您的班级声明几种类型的变量(来自docs):
- 类中的成员变量 - 这些变量称为字段。
- 方法或代码块中的变量 - 这些变量称为局部变量。
- 方法声明中的变量 - 这些变量称为参数。
您正在创建第二种类型,因此您的myWebView变量只能在声明它的代码块中访问。
将变量从第二种类型(本地)更改为第一种类型(类字段),并且可以在MainActivity类的任何位置访问它:
public class MainActivity extends Activity {
//declared as class field, will be accessible in every method of the class
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initialise it here
myWebView= (WebView) findViewById(R.id.webview);
//rest of your code
}