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

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

ただいまの
回答率

87.37%

AndroidStudioでのメモ帳でEditTextに入力したメモをButtonでLinearLayoutに表示したいのですが、表示ができません。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,329

score 164

AndroidStudioでのメモ帳でEditTextに入力したメモをButtonでLinearLayoutに表示したいのですが、表示ができません。
このコードはFragmentを使ってfragment_my_fragment2.xmlから、このfragment_myfragment2.xmlのページに飛ぶようにしているのですが、Activityしか使わない同じ機能のアプリを作成した時には、表示ができていました。
何故できないのかを教えていただけないでしょうか。どうぞよろしくお願いします。

//MyFragment2です。

package com.example.kanehiro.fragmentapplication;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Calendar;

public class MyFragment2 extends Fragment implements View.OnClickListener {

    //とりあえずここにさらなるステップの変数
    private EditText mInputMessage;
    private Button mSendMessage;
    private LinearLayout mMessageLog;
    //private TextView mMemoMessage;

    public MyFragment2() {

    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
       View view=inflater.inflate(R.layout.fragment_my_fragment2,container,false);

        //何に使うのかわからん Button btn = (Button) view.findViewById(R.id.button);

         view.findViewById(R.id.send_message).setOnClickListener(this);

       /** @Override
        public void onClick(View v){


            }
        });
       **/

        return view;
    }

    @Override
    public void onClick(View v) {
        //SENDボタンが押された時の処理


//ここから下のコードをここに移動させました。!!!!!!!!!!!!!



        // ActivityからFragmentを取得
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        Fragment fragment = fragmentManager.findFragmentById(R.id.send_message);

        // FragmentのViewを取得
        View view = fragment.getView();


        //ここがNullPointらしいです。!!!!!!!!!!!!!!!!!!!!
        mInputMessage = (EditText)view.findViewById(R.id.input_message);//ユーザーが入力するフィールド
        mSendMessage = (Button) view.findViewById(R.id.send_message);//SENDボタン
        mMessageLog = (LinearLayout)view.findViewById(R.id.message_log);//入力履歴を表示するレイアウト
        //  mMemoMessage = (TextView) view.findViewById(R.id.memo_message);//メモの履歴
        if(v.equals(mSendMessage)) {



//ここまでです。!!!!!!!!!!!!!!!!


//上のコードの塊がこの下の行より下にあったため、このString inputText=mI・・・の行がエラーとなっていました。  そのため上に移動しました。!!!!!!!!!!!

その結果、 //ここがNullPointらしいです。!!!!!!!!!!!!!!!!!!!!と書いてある下の行のコードがエラーログの結果の通り、NullPointerとなりました。

 String inputText=mInputMessage.getText().toString();


            if(inputText==null||inputText.length()==0){

                Toast.makeText(getActivity(),"文字が入力されていません",Toast.LENGTH_SHORT).show();
            }else {
                //新しくエラーを消すために作った場所
                //XMLのViewを初期化する


          //この次はデータベースや
                mSendMessage.setOnClickListener(this);

                //--時間を取得
                Calendar cal= Calendar.getInstance();
                int month = cal.get(Calendar.MONTH) + 1;
                int day = cal.get(Calendar.DATE);
                int hour=cal.get(Calendar.HOUR);//時
                int minute=cal.get(Calendar.MINUTE);//分
                String answer;
                answer=String.format(" %1$d/%2$d %3$d:%4$d    ",month,day,hour,minute);

                //--ここまでは、時間

                TextView memoMessage = new TextView(getActivity());


                memoMessage.setText(answer+inputText);
                mMessageLog.addView(memoMessage, 0);
                mInputMessage.setText("");
            }
        }


    }
}


fragment_my_fragment2.xmlです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context="com.example.kanehiro.fragmentapplication.MyFragment2">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/input_message"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_toLeftOf="@+id/send_message"
        android:layout_toStartOf="@+id/send_message" />

    <Button
        android:id="@+id/send_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:text="SEND"/>

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/input_message">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:id="@+id/message_log">

         <!--  <TextView
                android:id="@+id/memo_message"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="start"
                android:text="memo一覧"/>

                -->

        </LinearLayout>
    </ScrollView>

</RelativeLayout>


エラーログです。

10-03 12:41:30.515 11248-11248/? E/AndroidRuntime: FATAL EXCEPTION: main
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime: java.lang.NullPointerException
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at com.example.kanehiro.fragmentapplication.MyFragment2.onClick(MyFragment2.java:57)
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at android.view.View.performClick(View.java:4147)
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:17161)
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:615)
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:92)
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:213)
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:4786)
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:511)
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
10-03 12:41:30.515 11248-11248/? E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

view.findViewById(R.id.send_message).setOnClickListenerで空のリスナーを渡しているからですよ。
渡すのはFragmentに実装したリスナーなのでthisを渡す必要があります。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/10/03 14:48

    エラーログと、どのコードをどの場所に移動したのかを質問文のコードに記載しました。
    どうぞよろしくお願いします。

    キャンセル

  • 2016/10/03 14:53

    onClickでfragmentを探す処理を書いていますが不要です。
    探しているfragment内のメソッドなので直接getViewを読んでください。

    また、当初の質問とは異なるような質問の修正はやめたほうが良いです。

    キャンセル

  • 2016/10/03 15:02

    申し訳ありませんでした。
    直接getViewを読んだところ望んでいた実行ができました。
    ありがとうございました。

    キャンセル

+1

ぶっちゃけonClickの中がいろいろおかしいです。
if(v.equals(mSendMessage))が通って中に入るなら、mSendMessageはnullでないViewのはず。なのにその次であたかもStringのように使ってます。この段階でコンパイルエラーでは?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/10/03 10:32

    ありがとうございます。
    コンパイルエラーはないのですが、
    コードを変えてみたところ、エラーログには
    E/jdwp: Failed sending reply to debugger: Broken pipe と E/Trace: error opening trace file: No such file or directory (2) が出ます。
    コードは質問内容のコードと交換しておきました。mSendMessageをString inputText=mInputMessage.getText().toString();にしました。

    キャンセル

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

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • トップ
  • Javaに関する質問
  • AndroidStudioでのメモ帳でEditTextに入力したメモをButtonでLinearLayoutに表示したいのですが、表示ができません。