実現したいこと
入力ボタンを押すことでカレンダーを表示
→クリックした年月日を取得
→入力ボタンがあるページにあるテキストボックスへ表示させる
発生している問題・分からないこと
入力ボタンを押すとアプリが停止する。
エラーメッセージ
error
1 FATAL EXCEPTION: main 2Process: com.websarva.wings.android.error, PID: 26049 3java.lang.ClassCastException: com.websarva.wings.android.error.MainActivity cannot be cast to android.app.DatePickerDialog$OnDateSetListener 4 at com.websarva.wings.android.error.SampleFragment$DatePickerFragment.onCreateDialog(SampleFragment.java:51) 5 at androidx.fragment.app.DialogFragment.prepareDialog(DialogFragment.java:644) 6 at androidx.fragment.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:558) 7 at androidx.fragment.app.Fragment.performGetLayoutInflater(Fragment.java:1654) 8 at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:493) 9 at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) 10 at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) 11 at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100) 12 at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) 13 at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524) 14 at android.os.Handler.handleCallback(Handler.java:942) 15 at android.os.Handler.dispatchMessage(Handler.java:99) 16 at android.os.Looper.loopOnce(Looper.java:201) 17 at android.os.Looper.loop(Looper.java:288) 18 at android.app.ActivityThread.main(ActivityThread.java:7872) 19 at java.lang.reflect.Method.invoke(Native Method) 20 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 21 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) 22
該当のソースコード
Java
1public class MainActivity extends AppCompatActivity { 2 @Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.activity_main); 6 } 7}
xml
1<?xml version="1.0" encoding="utf-8"?> 2<androidx.fragment.app.FragmentContainerView 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:id="@+id/fragmentMainContainer" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:name="com.websarva.wings.android.error.SampleFragment" 9 tools:layout="@layout/fragment_sample" />
Java
1public class SampleFragment extends Fragment implements DatePickerDialog.OnDateSetListener{ 2 3 public SampleFragment() { 4 super(R.layout.fragment_sample); 5 } 6 7 @Override 8 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 9 super.onViewCreated(view, savedInstanceState); 10 11 //期間入力ボタンにリスナ設定 12 Button btPeriod=view.findViewById(R.id.btPeriod); 13 btPeriod.setOnClickListener(new BtPeriodClickListener()); 14 } 15 16 17 public static class DatePickerFragment extends DialogFragment{ 18 @Override 19 public Dialog onCreateDialog(Bundle savedInstanceState) { 20 21 //このフラグメントが所属するアクティビティオブジェクトを取得 22 Activity parentActivity=getActivity(); 23 // Use the current date as the default date in the picker. 24 final Calendar cl = Calendar.getInstance(); 25 int year = cl.get(Calendar.YEAR); 26 int month = cl.get(Calendar.MONTH); 27 int day = cl.get(Calendar.DAY_OF_MONTH); 28 29 // Create a new instance of DatePickerDialog and return it. 30 return new DatePickerDialog(parentActivity, (DatePickerDialog.OnDateSetListener)getActivity(), year, month, day); 31 } 32 } 33 34 @Override 35 public void onDateSet(DatePicker view, int year, int month, int day) { 36 TextView inputDate=view.findViewById(R.id.tvPeriodDisplay); 37 String outputDate=String.format("%d/%d/%d", year, month+1, day); 38 inputDate.setText(outputDate); 39 } 40 41 42 private class BtPeriodClickListener implements View.OnClickListener { 43 @Override 44 public void onClick(View view) { 45 DatePickerFragment dpFragment= new DatePickerFragment(); 46 dpFragment.show(getActivity().getSupportFragmentManager(), "datePicker"); 47 } 48 } 49}
xml
1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 android:baselineAligned="true" 8 android:orientation="vertical"> 9 10 <LinearLayout 11 android:layout_width="match_parent" 12 android:layout_height="wrap_content" 13 android:layout_marginStart="32dp" 14 android:layout_marginEnd="32dp" 15 android:orientation="horizontal"> 16 17 <TextView 18 android:id="@+id/tvPeriod" 19 android:layout_width="wrap_content" 20 android:layout_height="wrap_content" 21 android:text="期間" 22 android:textSize="20sp" /> 23 24 <Button 25 android:id="@+id/btPeriod" 26 android:layout_width="wrap_content" 27 android:layout_height="wrap_content" 28 android:layout_marginStart="8dp" 29 android:layout_marginEnd="8dp" 30 android:backgroundTint="@android:color/darker_gray" 31 android:text="入力" 32 android:textColor="@color/black" /> 33 34 <TextView 35 android:id="@+id/tvPeriodDisplay" 36 android:layout_width="wrap_content" 37 android:layout_height="wrap_content" 38 android:ems="10" 39 android:background="@android:color/darker_gray" 40 android:textSize="20sp" 41 tools:ignore="SpeakableTextPresentCheck" /> 42 43 </LinearLayout> 44</LinearLayout> 45
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
お世話になっております。
Javaを学び始め、初めてアプリ作成に取り組んでいます。
今回の機能実装にあたり、以下サイトを参考にしました。
参考①https://qiita.com/Pon2929/items/4024835c89406b0a6237
②https://developer.android.com/develop/ui/views/components/pickers?hl=ja
com.websarva.wings.android.error.MainActivity cannot be cast to android.app.DatePickerDialog$OnDateSetListener
このエラーメッセージをみてもMainActivityがなぜ関係しているのか理解できず、何を試せばよいのかわからない状況です。
ヒントとなるような小さなこと、なんでも構いませんのでアドバイスいただけると大変たすかります。
どうぞよろしくお願いいたします。
補足
AndroidStudio giraffe

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/02/22 22:21