【问题标题】:Calling method from Activity in fragment从片段中的Activity调用方法
【发布时间】:2017-11-22 16:46:20
【问题描述】:

我有一个 Activity (1),它有两个片段。此 Activity 使用我在应用程序中常用的基本方法扩展到另一 (2) 个。所以我想在单击位于 (1) 的片段之一中的一个按钮后调用 (2) 的方法,最好的方法是什么?

我正在尝试这样做:

login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(isValid()){
                    AndroidUtils.hideKeyboard(email, getActivity());
                    AuthenticationActivity.login(email.getText().toString(), password.getText().toString());
                }
            }
        });

但是它说不能从静态上下文中引用非静态方法。所以我尝试这样做:

login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(isValid()){
                    AndroidUtils.hideKeyboard(email, getActivity());
                    AuthenticationActivity instance = new AuthenticationActivity();
                    instance.login(email.getText().toString(), password.getText().toString());
                }
            }
        });

但它不起作用。

【问题讨论】:

    标签: java android android-fragments non-static


    【解决方案1】:

    试试这个

    ((AuthenticationActivity)getActivity()).login(email.getText().toString(), password.getText().toString());
    

    并使您的登录功能非静态

    【讨论】:

    • 虽然此解决方案可能有效,但您可以做得更好:developer.android.com/training/basics/fragments/…
    • 感谢您的回答。你介意向我解释一下你的替代方法和我使用的代码有什么区别吗?
    • 在java中你可以使用类型转换。如果您的问题得到解决,请接受并投票
    • @MarcosGuimaraes 基本上,您设置了一个与您的活动通信的接口,这比投射您的活动并在其中包含一个可能不应该公开的公共方法更干净。当您想与片段中的活动进行更多交流时,您应该完全看一下它。
    猜你喜欢
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多