質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • Java

    14396questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android Studio

    3886questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

android studio 他画面への値渡し、パラメータチェックの方法

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 426

AtyuNakamura

score 24

前提・実現したいこと

ここに質問したいことを詳細に書いてください
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

javaにかなりブランクがあります。
androidのアプリを作ってほしいと頼まれ、着手しています。
が、値渡しで行き詰っています。

fragment_main.xml のボタンが押された情報や、パラメータの取得を
MainActivityで行いたいと考え、下記のようにMainActivityでsetContentViewをし、ボタンが押されたことを取得しようと思ったのですが、参照先が見つからないとエラーが起きており困っています。
xmlでのinclude等も試しましたが解決方法が依然見つからない状態です。
そもそもMainActivityでfragment_mainのパラメータを参照しようとしていることがつくり的に間違っているのかと考え始め、収集がつかない状態になってしまいました。。

以下はfragment_main.xmlでレイアウトされているlogin_buttonが押下されたのをActivityMain.javaで確認し、webviewを開くというイメージで作っています。

エラーメッセージ


FATAL EXCEPTION: main
Process: jp.co.aex.performanceplus, PID: 15738
java.lang.RuntimeException: Unable to start activity ComponentInfo{XXXXX/XXXXX.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

該当のソースコード

MainActivity.java
fragment_main

//        setContentView(R.layout.fragment_main);
        Button sendButton = (Button) findViewById(R.id.fragment_main).findViewById(R.id.login_button);
        sendButton.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {
                System.out.println("find View end");
                // ボタンをクリックしたときの動作
                WebView webView_login;
                setContentView(R.layout.webview_main);
                webView_login = (WebView) findViewById(R.id.WebView_main);

                webView_login.loadUrl("http://www.google.com/");

                webView_login.setWebViewClient(new WebViewClient(){
                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                        return false;
                    }
                });
            }
        });

---中略---

fragment_main.xml

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:paddingEnd="1dp">

                <!--ログインIDテキスト-->
                <TextView
                    android:id="@+id/textView2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="ログインID"
                    android:textColor="@android:color/black"
                    android:textSize="24sp" />
                <!--ログインIDテキストボックス-->

                <EditText
                    android:id="@+id/editText2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:ems="10"
                    android:inputType="textPersonName"
                    android:text="IDを入力"
                    android:textColor="@android:color/darker_gray" />
                <!--パスワードテキスト-->
                <TextView
                    android:id="@+id/textView3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="パスワード"
                    android:textColor="@android:color/black"
                    android:textSize="24sp" />
                <!--パスワードテキストボックス()-->

                <EditText
                    android:id="@+id/editText3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:ems="10"
                    android:inputType="numberPassword"
                    android:text="コードを入力"
                    android:textColor="@android:color/darker_gray" />
                </LinearLayout>

                <!--確定ボタン-->
                <Button
                    android:id="@+id/login_button"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#EB5516"
                    android:elevation="2dp"
                    android:text="ログイン"
                    android:textColor="#FFFFFF" />

            </LinearLayout>
---中略---

試したこと

補足情報(言語/FW/ツール等のバージョンなど)

android studio , java

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

下記のコードはidがfragment_mainのViewGroupの子Viewでidがlogin_buttonのViewのインスタンスを探すという意味です。
レイアウトファイルfragment_mainの中でidがlogin_mainの物を探すという意味にはなりません。

Button sendButton = (Button) findViewById(R.id.fragment_main).findViewById(R.id.login_button);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/13 12:51

    ご回答ありがとうございます。
    ということは、fragment_mainというよりはactivity_mainに記載するのが一般的というところでしょうか。。
    main_activity内でframe_layoutによりmain_fragmentを参照している構造だったので、main_fragmentを拡張していくしかないのかなという判断になっておりました。。

    キャンセル

  • 2017/09/13 13:10

    「main_fragmentを参照している」とはどのような意味でしょうか?
    プログラムにおいて、参照には特別な意味が複数あるので具体的に書いてください。

    キャンセル

  • 2017/09/13 13:15

    activity_main.xmlの中に、
    <FrameLayout
    android:id ="@+id/fragment_main"
    android:orientation="vertical"
    android:layout_width="368dp"
    android:layout_height="551dp"
    tools:layout_editor_absoluteY="8dp"
    tools:layout_editor_absoluteX="8dp">

    </FrameLayout>
    と定義されていて、Fragment_mainを表示している、という意味でした。

    とても時間がないために、用語不足でご迷惑をおかけします。

    キャンセル

  • 2017/09/13 14:20

    それはそういう意味ではありませんよ。
    このFrameLayoutはFragmentを配置するためのコンテナであり、Viewを管理しているのはMainActivityではありません。
    Fragmentについて調べましょう。

    キャンセル

  • 2017/09/13 14:22

    なるほど、ご教授ありがとうございます!
    大変お手数おかけいたしました・・・!

    キャンセル

同じタグがついた質問を見る

  • Java

    14396questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android Studio

    3886questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。