如何将 Activity 中的 ClickListener 设置为属于 Fragment 的 Button? (Android工作室Java)

Posted

技术标签:

【中文标题】如何将 Activity 中的 ClickListener 设置为属于 Fragment 的 Button? (Android工作室Java)【英文标题】:How do I set a ClickListener in a Activity to a Button that belongs to a Fragment? (Android studio Java) 【发布时间】:2021-10-19 14:06:00 【问题描述】:

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

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

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

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

提前感谢您的所有帮助

【问题讨论】:

为什么要在另一个 Activity 的 Fragment 中的按钮上添加点击监听器?那个 Fragment 是不可见的,对吧? @NikhilBansal 我需要这样做,因为该按钮将调用另一个活动,我知道我可以从片段中做到这一点,但我更喜欢从另一个活动中做到这一点(该活动是切换碎片)。如果你知道怎么做这将非常有用谢谢:) 因此,您有一个显示片段 A 的活动 A。片段 A 在其 UI 中显示一个按钮,单击此按钮时,将打开另一个活动 B。我说的对吗? @NikhiBansal 是的,你完全正确,但我需要找到一种方法来设置 Activity A 中按钮的 ClickListener。但我不知道该怎么做,因为即使我初始化了Activity 中的按钮,我得到 NullPointerException 错误。问题在于初始化:使用调试控制台,我看到在 Fragment 中按钮已正确初始化,但在 Activity 中它具有空值。这就是为什么我不能设置 OnCLickListener。 :( 我不知道如何解决这个问题 显示更多关于你的 Fragment 的详细代码 【参考方案1】:

由于按钮是片段的一部分,它只适合在片段本身的范围内定义对按钮的任何交互/修改。

有两种方法:

    在 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();
    
    

【讨论】:

抱歉,MyClickListener 是什么?因为如果我写它会给我错误。然后 void onAttach 它从未使用过。你用 onMyButtonClick 写的第二条评论是指 OnClick()?如果您有时间可以重新编写该代码,因为我无法按照它的编写方式获得它。很抱歉给您带来不便,但我对此感到很困惑,现在有点绝望。如果你不能重写,那很好。无论如何感谢您的帮助:) @FrancescoBernardi MyClickListener 只是一个您必须定义的接口。我已经更新了代码示例。

以上是关于如何将 Activity 中的 ClickListener 设置为属于 Fragment 的 Button? (Android工作室Java)的主要内容,如果未能解决你的问题,请参考以下文章

如何将片段中的 ListView 对象的数据传递给 Activity?

如何将值从基本适配器传递到 Android 中的 Activity

如何将 AzureDatafactory 中的 DataPath PipelineParameter 传递给 AzureMachineLearningExecutePipeline Activity?

如何将 Activity 中的 ClickListener 设置为属于 Fragment 的 Button? (Android工作室Java)

如何实Android中现两个activity的图片传递?

Android如何成功截击请求,如何将数据从Activity传递到Fragment?