###前提・実現したいこと
android studioで体重管理アプリをつくろうとしています。ボタンを押して、数値の変更を行うプログラムです。OSはwindows10です。
###発生している問題・エラーメッセージ
エミュレーターの実行はできました。しかし、ボタンを押してみると、アプリが停止してしまいます。
###該当のソースコード
package com.example.rhythm.myweight;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import java.math.BigDecimal;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity {
private BigDecimal mWeight = new BigDecimal("50.0"); //体重の初期設定 private Calendar mCal = Calendar.getInstance(); //日付 public static class MainDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("保存処理"); builder.setMessage("保存します"); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //保存処理 } }); return builder.create(); } } public static class DatePickerFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); return new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth){ ((MainActivity)getActivity()).setCalendar(year, monthOfYear, dayOfMonth); } }, year, month, day); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showData(); } public void onSaveButtonTapped(View view) { DialogFragment newFragment = new MainDialogFragment(); newFragment.show(getFragmentManager(), "MainFragmentDialog"); } public void onDateButtonTapped(View view) { DialogFragment picker = new DatePickerFragment(); picker.show(getFragmentManager(), "datePiker"); } public void setCalendar(int year, int month, int day){ mCal.set(year, month, day); showData(); } private void showData(){ Button weight = (Button) findViewById(R.id.weight); weight.setText(String.valueOf(mWeight)); String today = mCal.get(Calendar.YEAR) + "/" + (mCal.get(Calendar.MONTH) + 1) + "/" + mCal.get(Calendar.DATE); Button date = (Button)findViewById(R.id.date); date.setText(today); } public void onChangeWeughtButtonTapped(View view){ switch (view.getId()) { case R.id.plus_weight: mWeight = mWeight.add(new BigDecimal("0.1")); break; case R.id.minus_weight: break; } showData(); } public void onChangeDateButtonTapped(View view){ switch (view.getId()) { case R.id.plus_date: mCal.add(Calendar.DATE, 1); break; case R.id.minus_date: mCal.add(Calendar.DATE, -1); break; } showData(); }
}
以下がエラーロゴです
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.rhythm.myweight, PID: 2211
java.lang.IllegalStateException: Could not find method onChangeWeughtButtonTapped (MainActivity)(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'plus_weight'
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22260)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
###試したこと
Target SDKを変えてみました。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報