如何将 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()?如果您有时间可以重新编写该代码,因为我无法按照它的编写方式获得它。很抱歉给您带来不便,但我对此感到很困惑,现在有点绝望。如果你不能重写,那很好。无论如何感谢您的帮助:) @FrancescoBernardiMyClickListener
只是一个您必须定义的接口。我已经更新了代码示例。以上是关于如何将 Activity 中的 ClickListener 设置为属于 Fragment 的 Button? (Android工作室Java)的主要内容,如果未能解决你的问题,请参考以下文章
如何将片段中的 ListView 对象的数据传递给 Activity?
如何将值从基本适配器传递到 Android 中的 Activity
如何将 AzureDatafactory 中的 DataPath PipelineParameter 传递给 AzureMachineLearningExecutePipeline Activity?
如何将 Activity 中的 ClickListener 设置为属于 Fragment 的 Button? (Android工作室Java)