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

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

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

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

Android Studio

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

Q&A

解決済

1回答

708閲覧

DialogFragmentでユーザーから得た情報をMainActivityに反映したい

Ahh_

総合スコア2

Android

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

Android Studio

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

0グッド

0クリップ

投稿2019/08/11 11:21

前提・実現したいこと

AndroidでDialogFragmentを使ってユーザーに情報を入力してもらい、その情報をMainActivityに反映(再描画)したい

試したこととその結果①

試したこと
PositiveButtonのOnClickListenerにMainActivityへ画面遷移する旨を書いておく
MainActivityはDialog表示中もActiveなので、自分から自分に遷移させていると思われるのですが、とりあえず無理やりonCreateを呼び出せばいけるかなと考えました。

結果
アプリ起動後の初回は上手く行くのですが、2回目もやろうとすると
"Unfortunately, myApp has stopped."と言われ落ちます。

具体的には、
アプリを起動
→dialogを表示
→OKボタンを押す(1回目)
→ちゃんと内容が反映されたMainActivityに遷移している!(onCreateが呼び出されている)
→もう一回dialogを表示
→OKボタンを押す(2回目)
→落ちる

myDialog

1public class myDialog extends DialogFragment { 2 3 @Override 4 public Dialog onCreateDialog(Bundle savedInstanceState) { 5 6 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 7 LayoutInflater inflater = getActivity().getLayoutInflater(); 8 final View v = inflater.inflate(R.layout.alertdialog_xml, null); 9 10 builder.setView(v); 11 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 12 @Override 13 public void onClick(DialogInterface dialog, int id) { 14 //諸々の処理 15 ///MainActivityに遷移 16 Intent intent = new Intent(); 17 intent.setClassName(Global.packageName,Global.packageName+ ".MainActivity"); 18 startActivity(intent); 19 } 20 }) 21 .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 22 public void onClick(DialogInterface dialog, int id) { 23 //諸々の処理 24 } 25 }); 26 return builder.create(); 27 } 28} 29

試したこととその結果②

試したこと
ダイアログ風なActivityを作ろうとした
結果
表示しようとすると落ちる

AndroidManifest

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.xxxxx.myApp"> 4 5 <application 6 android:allowBackup="true" 7 android:icon="@mipmap/ic_launcher" 8 android:label="@string/app_name" 9 android:roundIcon="@mipmap/ic_launcher_round" 10 android:supportsRtl="true" 11 android:theme="@style/AppTheme"> 12 <activity android:name=".MainActivity"> 13 <intent-filter> 14 <action android:name="android.intent.action.MAIN" /> 15 <category android:name="android.intent.category.LAUNCHER" /> 16 </intent-filter> 17 </activity> 18 <activity 19 android:name=".DialogoidActivity" 20 android:theme="@android:style/Theme.Dialog"/> 21 </application> 22</manifest>

MainActivity

1public class MainActivity extends AppCompatActivity { 2 3 @Override 4 public void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 //諸々の処理 9 10 FloatingActionButton floatingActionButton = (FloatingActionButton)findViewById(R.id.floatingActionButton); 11 floatingActionButton.setOnClickListener(new View.OnClickListener() { 12 @Override 13 public void onClick(View v) { 14 Intent goDialog = new Intent(); 15 goDialog.setClassName(getPackageName(), getPackageName() + ".DialogoidActivity"); 16 startActivity(goDialog); 17 } 18 }); 19 } 20} 21

DialogoidActivity

1public class DialogoidActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState){ 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.alertdialog_xml); 7 8 } 9}

##知りたいこと
もちろん試したこと①②が上手く行かない理由も知りたいですが、何より「正攻法」は何なのかを知りたいです…

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

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

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

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

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

guest

回答1

0

自己解決

https://high-programmer.com/2017/07/28/android-studio-dialogtoactivity-value/
を参考にしたら一発で行けました!

MainActivityにpublic voidな描画用の関数を作って、
Fragmentから
MainActivity mainactivity = (MainActivity)getActivity();
mainactivity.drawFunction();
な感じで行けました!

投稿2019/08/11 11:32

Ahh_

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問