前提・実現したいこと
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}
##知りたいこと
もちろん試したこと①②が上手く行かない理由も知りたいですが、何より「正攻法」は何なのかを知りたいです…
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。