访问另一个类中使用的变量Eclipse?

时间:2013-11-22 21:28:10

标签: java android eclipse class variables

请保持温和,我是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");              
                }
            });
         }


}

3 个答案:

答案 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
}

了解有关课程,范围等的基础知识是个好主意,您可以查看hereherehere