【问题标题】:Accessing a variable used in another class, Eclipse?访问另一个类 Eclipse 中使用的变量?
【发布时间】:2013-11-22 21:28:10
【问题描述】:

请轻点,我是 Java 新手,但我真的很想学习。我在这里有一个简单的应用程序(实验),带有一个 web 视图和三个按钮。每个按钮都会将另一个地址加载到 web 视图中。

正如您在每个按钮上看到的那样,在“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");              
                }
            });
         }


}

【问题讨论】:

    标签: java android eclipse class variables


    【解决方案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

    【讨论】:

    • 感谢您的所有友好回答,我现在明白了。将继续学习更多有关基础知识的知识,从课程开始...:)
    【解决方案2】:

    使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");              
                    }
                });
             }
    
    
    }
    

    【讨论】:

      【解决方案3】:

      为您的班级创建一个新字段,以便您可以重复使用它。

      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
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-20
        • 1970-01-01
        • 2023-04-07
        • 2020-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多