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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Q&A

解決済

2回答

2513閲覧

Activity Fragment 戻り値戻らない

sakuma_yujin

総合スコア27

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

0グッド

0クリップ

投稿2017/03/25 02:35

###前提・実現したいこと
AndroidStudioさわり始めて2,3か月の初心者です

FragmentでActivityにあるメソッドを呼び出して
ActivityからFragmentに戻り値を返したいのですが
戻り途中でエラーが発生するようでアプリが強制終了してしまいます
戻り値の内容はString型です。
中身に関してもエラーは発見できませんでした

どの様にすれば解決できますか

わかりやすく説明していただければ幸いです

動作内容

メソッドを呼び出す→プリファレンス内のデータを読み込む→読み込んだデータを戻り値として返す→TextViewに表示する。

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

03-25 01:05:51.854 14737-14737/com.example.syoribuuser.firstopenandfragment E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.syoribuuser.firstopenandfragment, PID: 14737 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference

###該当のソースコード
呼び出し側

java

1package com.example.syoribuuser.firstopenandfragment; 2 3 4import android.content.Intent; 5import android.os.Bundle; 6import android.support.v4.app.Fragment; 7import android.view.LayoutInflater; 8import android.view.View; 9import android.view.ViewGroup; 10import android.widget.ImageButton; 11import android.widget.TextView; 12 13public class Fragment0 extends Fragment { 14 15 @Override 16 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 17 View v = inflater.inflate(R.layout.activity_fragment0, container,false); 18 19 20> TextView textView1 = (TextView)v.findViewById(R.id.name); 21> Main2Activity main2Activit=new Main2Activity(); 22 23> String h= main2Activit.n(); 24> Log.d("debug1",h); 25> textView1.setText(h); 26 return v; 27 28 } 29 30 @Override 31 public void onStart() { 32 super.onStart(); 33 34 final ImageButton imageButton4 = (ImageButton)getActivity().findViewById(R.id.imageButton4); 35 imageButton4.setOnClickListener(new View.OnClickListener() { 36 37 @Override 38 public void onClick(View v) { 39 40 Intent intent = new Intent(getActivity(), Setting.class); 41 startActivityForResult(intent, 0); 42 43 } 44 }); 45 46 } 47 48} 49

呼び出されて戻す側

java

1package com.example.syoribuuser.firstopenandfragment; 2 3import android.content.SharedPreferences; 4import android.os.Bundle; 5import android.support.v4.app.FragmentActivity; 6import android.support.v4.view.ViewPager; 7import android.util.Log; 8import android.widget.TextView; 9 10 11public class Main2Activity extends FragmentActivity { 12 ViewPager viewPager; 13 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_main2); 18 viewPager = (ViewPager) findViewById(R.id.pager); 19 viewPager.setAdapter( 20 new MyFragmentStatePagerAdapter( 21 getSupportFragmentManager())); 22 23 n(); 24 25 26 } 27 28 public String n(){ 29 30> SharedPreferences preferences = getSharedPreferences("PrefrencesFile", MODE_PRIVATE ); 31 32> String str = preferences.getString("NAME",""); 33 34> Log.d("debug2",str); 35 36> return str; 37 38 } 39 40 41}

###試したこと
戻り値中身の確認
Log.d()利用によるreturnn

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Activityはプログラマーがインスタンス化するクラスではありません。そこの理解から始めないと無意味です。

また、プリファレンスにアクセスするメソッドをActivityに作ることに固執する必要はありません。
プリファレンスにアクセスするための専用クラスを定義した方がいいですよ。

投稿2017/03/25 07:23

編集2017/03/25 07:34
yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

interfaceなりでActivityとFragmentをつなげれば簡単です。

んで、これって同じ質問者の方のクラスの呼び出しPreference読み込み時点でのエラーの内容と同じですよね。

なのでコード記載もしてしまいますので以下を参考にしてみてください。
実際にやりたい処理についてはご自身で行ってください。
あとinterfaceとかわからなければ別途お調べください。
最後に直打ちしたのでタイポなんかがあったらすいません。


Fragment側はこのように。

Java

1public interface OnFragmentListener { 2 String getData(String key); 3} 4 5private OnFragmentListener mListener; 6 7@Override 8public void onAttach(Activity activity) { 9 super.onAttach(activity); 10 11 //Build.VERSION_CODES.LOLLIPOP_MR1より上はonAttach(Context context)で処理するのでreturn 12 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) return; 13 14 onAttachActivity(activity); 15} 16 17 18@Override 19public void onAttach(Context context) { 20 super.onAttach(context); 21 onAttachActivity(context); 22} 23 24public void onAttachActivity(Context context){ 25 if (context instanceof OnFragmentListener) { 26 mListener = (OnFragmentListener) context; 27 } else { 28 //絶対ActivityとFragmentを連携させるならthrowさせる 29 throw new RuntimeException(context.toString() 30 + " must implement OnFragmentListener"); 31 } 32} 33 34 35//Fragment側で呼ぶ場合はこのように。 36//mListener.getData("なんかのkey"); 37

Activity側はこのように。

Java

1 2//Activity側に 該当FragmentのOnFragmentListenerをimplementしてください; 3@Override 4public String OnFragmentListener(String key){ 5 return "ただActivityからKeyをFragmentに返すだけ Key = " + key; 6} 7

投稿2017/03/25 03:18

編集2017/03/28 15:40
uniko

総合スコア448

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uniko

2017/03/28 03:41 編集

アンサー選らばれてますが、プリファレンスのみを取得したいのであればyonaさんの回答の通りです。 私の回答はフラグメントとアクティビティ間で何かするというところで参考にしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問