不确定如何解决illegalstateexception:在android:java应用程序的父或祖先上下文中找不到方法storeemail(视图)

gpfsuwkq  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(239)

这是我所看到的一个完全的例外,对于标题来说太大了
java.lang.illegalstateexception:在android的父或祖先上下文中找不到方法storeemail(view):在id为“confirmfrag”的视图类com.google.android.material.button.materialbutton上定义的onclick属性
我正试图将一些数据从片段发送回它的父活动。我对安卓开发非常陌生,在意图、片段和数据传递的一般方式上都有很多困难。我原以为下面的代码最终是罚单,但似乎不是。
这是片段代码

  1. public class EmailFragment extends Fragment {
  2. EmailCreated activity;
  3. public interface EmailCreated {
  4. String onEmailCreated(Bundle emailBundle);
  5. }
  6. public EditText subjectLineFrag, emailFrag;
  7. public String emails, subject;
  8. public Button confirmFrag;
  9. public Bundle emailBundle;
  10. @Nullable
  11. @org.jetbrains.annotations.Nullable
  12. @Override
  13. public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
  14. View view = inflater.inflate(R.layout.email_fragment, container, false);
  15. emailFrag = view.findViewById(R.id.emailFrag);
  16. subjectLineFrag = view.findViewById(R.id.subjectLineFrag);
  17. confirmFrag = view.findViewById(R.id.confirmFrag);
  18. return view;
  19. }
  20. public Bundle storeEmail(View v, EditText subjectLineFrag, EditText emailFrag) {
  21. String emails = emailFrag.getText().toString();
  22. String subject = subjectLineFrag.getText().toString();
  23. emailBundle.putString("message", emails);
  24. emailBundle.putString("subject", subject);
  25. return emailBundle;
  26. }
  27. @Override
  28. public void onAttach(@NonNull @NotNull Context context) {
  29. //context will refer to the attached activity
  30. super.onAttach(context);
  31. activity = (EmailCreated) context;
  32. }
  33. @Override
  34. public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
  35. super.onCreate(savedInstanceState);
  36. }
  37. //Implement Fragment Lifecycle
  38. @Override
  39. public void onStart() {
  40. super.onStart();
  41. }
  42. @Override
  43. public void onResume() {
  44. super.onResume();
  45. }
  46. @Override
  47. public void onPause() {
  48. super.onPause();
  49. }
  50. @Override
  51. public void onStop() {
  52. super.onStop();
  53. }
  54. @Override
  55. public void onDestroyView() {
  56. super.onDestroyView();
  57. }
  58. @Override
  59. public void onDestroy() {
  60. super.onDestroy();
  61. }
  62. @Override
  63. public void onAttach(@NonNull @NotNull Activity activity) {
  64. super.onAttach(activity);
  65. }
  66. @Override
  67. public void onDetach() {
  68. super.onDetach();
  69. }

}
最初我将变量声明为private,但我在这里读到,将它们公开可能会起作用,但不会起作用
下面是它所附加到的活动的代码,非常简单,首先尝试执行片段

  1. public class GuestActivity2 extends AppCompatActivity implements EmailFragment.EmailCreated {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_guest2);
  6. FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
  7. transaction.replace(R.id.container, new EmailFragment());
  8. transaction.commit();
  9. }
  10. @Override
  11. public String onEmailCreated(Bundle emailBundle) {
  12. return null;
  13. }

}
我不知道为什么这不起作用。我试图在活动中创建方法,因为我认为这是消息告诉我要做的,但没有被识别。更改变量不起作用。我还没有试着用这个包裹做任何事情,所以也许就这样?我有点迷路了

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题