如何在 Activity 中将 ClickListener 设置为属于 Fragment 的 Button?(Android Studio Java)

How do I set a ClickListener in a Activity to a Button that belongs to a Fragment? (Android studio Java)

提问人:Berna 提问时间:8/18/2021 最后编辑:ZainBerna 更新时间:8/18/2021 访问量:374

问:

我需要一些帮助。我正在 android studio 上制作一个应用程序,并且在 Fragment 中初始化了一个 Button。我需要在另一个 Activity 中调用此按钮并在其上设置单击侦听器。

问题是,当我这样做时,我得到.NullPointerExceptionError,它说对象的值为 null。

现在我尝试在我的片段和活动中初始化按钮,但我不断收到该错误并且应用程序崩溃。

我需要一些帮助才能从 Fragment 调用此按钮。也许我的问题与其他问题相似,但是我花了几个小时才寻找这个问题的解决方案,却一无所获。

提前感谢您的所有帮助

java android 活动 nullpointerexception

评论

0赞 Nikhil Bansal 8/18/2021
为什么要在另一个 Activity 的 Fragment 中的按钮上添加点击侦听器?那个碎片是不可见的,对吧?
0赞 Berna 8/18/2021
@NikhilBansal我需要这样做,因为该按钮将调用另一个活动,我知道我可以从片段中执行此操作,但我更喜欢从另一个活动(该活动是切换片段的活动)。如果您知道如何执行此操作,那将非常有用,谢谢:)
0赞 Nikhil Bansal 8/18/2021
因此,您有显示片段 A 的活动 A,片段 A 在其 UI 中显示一个按钮,单击此按钮后,将打开另一个活动 B。我说得对吗?
0赞 Berna 8/18/2021
@NikhiBansal 是的,你说得完全正确,但我需要找到一种方法来设置活动 A 中按钮的 ClickListener。但我不知道该怎么做,因为即使我在活动中初始化按钮,我也会出现 NullPointerException 错误。问题出在初始化上:使用调试控制台,我看到在 Fragment 中按钮已正确初始化,但在 Activity 中它有一个 null 值。这就是我无法设置 OnCLickListener 的原因。:(我不知道如何解决这个问题
0赞 shuabing 8/18/2021
显示有关 Fragment 的更多详细代码

答:

1赞 Nikhil Bansal 8/18/2021 #1

由于按钮是 Fragment 的一部分,因此它只适合在 Fragment 的作用域本身中定义对按钮的任何交互/修改。

有两种方法可以解决:

  1. 在 Fragment 本身中创建单击侦听器,然后从那里导航到另一个 Activity。

  2. 创建一个 Activity 实现的接口,并且 Fragment 具有该接口的实例。单击按钮时,调用接口的方法。这样一来,您就可以控制托管片段的活动。

    MyActivity extends AppCompatActivity implements MyClickListener {
    
        void onMyButtonClick() {
           // Navigate to another activity here
        }
    }
    
    
    MainFragment extends Fragment {
    
        private MyClickListener listener;
    
        void onAttach(Context context) {
            listener = (MyClickListener) context;
            // Now call listener.onMyButtonClick() from button's on click listener.
        }
    }
    
    interface MyClickListener {
        void onMyButtonClick();
    }
    

评论

0赞 Berna 8/18/2021
很抱歉提出问题,但什么是 MyClickListener?因为如果我写它,它会给我错误。然后 void onAttach 它永远不会被使用。你用 onMyButtonClick 写的第二条评论是 OnClick()?如果你有时间,你可以重新编写该代码,因为我无法按其编写方式获取它。很抱歉给您带来不便,但我对此感到困惑,现在有点绝望。如果你不能重写,那也没关系。无论如何,感谢您的帮助:)
0赞 Nikhil Bansal 8/18/2021
@FrancescoBernardi 这只是您必须定义的一个接口。我已经更新了代码示例。MyClickListener