12799

[code]

    package com.example.makki.webviewex;
    
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.Toast;
    
    public class WebViewEx extends ActionBarActivity {
    
    //メニューアイテムID
    private static final int MENU_ITEM0 = 0;
    private static final int MENU_ITEM1 = 1;
    private static final int MENU_ITEM2 = 2;
    private static final int MENU_ITEM3 = 3;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view_ex);
    
        //Weビューの作成
        WebView webView = new WebView(this);
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(false);
        settings.setSupportZoom(false);
    
    
    
        //リンクをタップしたときに標準ブラウザを起動させない
        webView.setWebViewClient(new WebViewClient());
    
        //Weビューの通知リクエストの処理
        webView.setWebViewClient(new WebViewClient() {
            //URジャンプ時前に呼ばれる
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //外部ブラウザではなく内部ブラウザを利用
                return false;
            }
    
    
            //エラー時に呼ばれる
            @Override
            public void onReceivedError(WebView view, int errorCode,
                                        String description, String url) {
                toast("通信エラーです。");
            }
        });
        setContentView(webView);
    
        //HTMの読み込み
    
        webView.loadUrl("https://www.google.co.jp/");
    
    
    }
    
    //トーストの表示
    private void toast(String text){
        if (text == null)text = "";
        Toast.makeText(this, text, Toast.LENGTH_LONG).show();
    }
    
    //オプションメニューの生成
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_web_view_ex, menu);
    
        //オプションメニューへのアイテム0追加
        MenuItem item0 = menu.add(0,MENU_ITEM0,0,"ログイン");
        item0.setIcon(android.R.drawable.ic_menu_camera);
    
        //オプションメニューへのアイテム0追加
        MenuItem item1 = menu.add(0,MENU_ITEM1,0,"項目１");
        item0.setIcon(android.R.drawable.ic_menu_camera);
    
        //オプションメニューへのアイテム0追加
        MenuItem item2 = menu.add(0,MENU_ITEM2,0,"項目２");
        item0.setIcon(android.R.drawable.ic_menu_camera);
    
        //オプションメニューへのアイテム0追加
        MenuItem item3 = menu.add(0,MENU_ITEM3,0,"押してはいけない");
        item0.setIcon(android.R.drawable.ic_menu_camera);
    
    
    
        return true;
    
    
    
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int itemId = item.getItemId();
        if(itemId == MENU_ITEM0){
            toast("ログインを押した");
            webView.loadUrl("https://accounts.google.com/ServiceLogin?hl=ja&continue=https://www.google.co.jp/#identifier");
    
    
        }else if(itemId == MENU_ITEM3){
            toast("ダメよダメダメ");
        }
    
    
        //noinspection SimplifiableIfStatement
        if (itemId == R.id.action_settings) {
            return true;
        }
    
        return super.onOptionsItemSelected(item);
    }
    
    }
    
[/code]

質問です。  
オプションメニューでログインを選択した時にwebViewを呼び出したいのですが、  
どのように書けばいいのでしょうか？  
このソースですと「toast("ログインを押した");」の行の下が間違っているようです。

画面の動きで説明すると、アプリ起動時はgoogle検索画面、オプションメニューからログインを選択した時にグーグルのログイン画面に遷移すれば良いです。

よろしくお願いします。


CC BY-SA 3.0
2015-07-29T06:05:55.860
12787
2015-07-29T10:23:17.770
2015-07-29T10:23:17.770
7290
10715
question
android java android-studio
Android webViewをオプションメニューでの呼び出し方を教えてください。


`webview`変数のスコープが間違っているようです。  
AndroidというよりJavaの話ですので、<http://msugai.fc2web.com/java/scope.html> などを御覧ください。  
makkiさんのコードでは`WebView webView = new WebView(this);`とありますが、これはローカル変数として宣言しています。  
ローカル変数は別のメソッドからは参照することが出来ないので、他のメソッドから参照したい場合はメンバ変数として宣言する必要があります。

メンバ変数として宣言した場合、onCreateメソッドは以下のように修正出来ると思います。これでコンパイルエラーは解消すると思います。

[code]

    public class MainActivity extends ActionBarActivity {
    
    //メニューアイテムID
    private static final int MENU_ITEM0 = 0;
    private static final int MENU_ITEM1 = 1;
    private static final int MENU_ITEM2 = 2;
    private static final int MENU_ITEM3 = 3;
    
    // メンバ変数はメソッドの外で行う
    private WebView webView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(webView);を後でやっているのでこれは必要ない
        // setContentView(R.layout.activity_main);
    
        //Weビューの作成
        // webView変数はメンバ変数として行う
        webView = new WebView(this);
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(false);
        settings.setSupportZoom(false);
    
    
    
        //リンクをタップしたときに標準ブラウザを起動させない
        webView.setWebViewClient(new WebViewClient());
    
        //Weビューの通知リクエストの処理
        webView.setWebViewClient(new WebViewClient() {
            //URジャンプ時前に呼ばれる
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //外部ブラウザではなく内部ブラウザを利用
                return false;
            }
    
    
            //エラー時に呼ばれる
            @Override
            public void onReceivedError(WebView view, int errorCode,
                                        String description, String url) {
                toast("通信エラーです。");
            }
        });
        setContentView(webView);
    
        //HTMの読み込み
    
        webView.loadUrl("https://www.google.co.jp/");
    
    
    }
    
[/code]


CC BY-SA 3.0
2015-07-29T09:18:20.503
12799
2015-07-29T09:18:20.503
8097
12787
answer