首页 > 解决方案 > 不确定如何解决 IllegalStateException:在 Android:Java 应用程序的父级或祖先上下文中找不到方法 storeEmail(View)

问题描述

这是我看到的完整例外,对于标题来说太大了

java.lang.IllegalStateException:无法在父或祖先上下文中找到方法 storeEmail(View) 为 android:onClick 属性定义在视图类 com.google.android.material.button.MaterialButton 与 id 'confirmFrag'

我正在尝试将片段中的一些数据发送回它的父活动。我对 Android 开发非常陌生,并且在意图和片段以及传递数据的一般方式方面遇到了很多困难。我原以为下面的代码最终是票,但似乎不是。

这是片段代码

public class EmailFragment extends Fragment {
EmailCreated activity;

public interface EmailCreated {
    String onEmailCreated(Bundle emailBundle);
}

public EditText subjectLineFrag, emailFrag;
public String emails, subject;
public Button confirmFrag;
public Bundle emailBundle;

@Nullable
@org.jetbrains.annotations.Nullable
@Override
public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.email_fragment, container, false);
    emailFrag = view.findViewById(R.id.emailFrag);
    subjectLineFrag = view.findViewById(R.id.subjectLineFrag);
    confirmFrag = view.findViewById(R.id.confirmFrag);

    return view;
}

public Bundle storeEmail(View v, EditText subjectLineFrag, EditText emailFrag) {
    String emails = emailFrag.getText().toString();
    String subject = subjectLineFrag.getText().toString();
    emailBundle.putString("message", emails);
    emailBundle.putString("subject", subject);
    return emailBundle;
}

@Override
public void onAttach(@NonNull @NotNull Context context) {
    //context will refer to the attached activity
    super.onAttach(context);
    activity = (EmailCreated) context;
}

@Override
public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}


//Implement Fragment Lifecycle
@Override
public void onStart() {
    super.onStart();
}

@Override
public void onResume() {
    super.onResume();
}

@Override
public void onPause() {
    super.onPause();
}

@Override
public void onStop() {
    super.onStop();
}

@Override
public void onDestroyView() {
    super.onDestroyView();
}

@Override
public void onDestroy() {
    super.onDestroy();
}

@Override
public void onAttach(@NonNull @NotNull Activity activity) {
    super.onAttach(activity);
}

@Override
public void onDetach() {
    super.onDetach();
}

}

最初我已将变量声明为私有但我在这里读到将它们公开可能有效但没有雪茄

这是它所附加的活动的代码,非常简单,试图先做片段

public class GuestActivity2 extends AppCompatActivity implements EmailFragment.EmailCreated {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_guest2);

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.container, new EmailFragment());
    transaction.commit();
}

@Override
public String onEmailCreated(Bundle emailBundle) {

    return null;
}

}

我不知道为什么这不起作用。我试图在活动中创建该方法,因为我认为这是消息告诉我要做的,但它未被识别。更改变量不起作用。我还没有尝试对 Bundle 做任何事情,所以也许就是这样?我有点失落

标签: javaandroidexceptionillegalstateexception

解决方案


推荐阅读