如何在Fragment中捕获onclick事件

3
我在一个xml布局文件中声明了许多按钮,并将此布局用于片段。但是很遗憾,“onClickButton”事件在宿主活动中被捕获,而不是在我的片段中。当然,在我的片段中,我可以手动解决此问题,如下所示:
是否有一种明确的方法在片段中处理onClickbutton事件?请注意保留HTML标记。
3个回答

6
您所提到的方法是标准做法:
 Button buttonN = (Button) view.findViewById(R.id.buttonN);
 buttonN.setOnClickListener(...);

只需让您的 Fragment 实现 OnClickListener 接口,然后将其设置为监听所有按钮即可。
Button buttonN = (Button) view.findViewById(R.id.buttonN);
buttonN.setOnClickListener(this);

1

不幸的是,仅使用Android SDK时,在代码中执行此操作是唯一的方法。

您尝试过自定义吗? AndroidAnnotationsRoboGuice 可以使其更简洁。


我宁愿使用数据绑定官方库 - venimania
@venimania 在2013年,数据绑定库和ButterKnife都还没有出现。这对于Android开发者来说是黑暗的时期 ;) - MaciejGórski

0

嗯,有趣。我从未尝试过这些代码。这只是一种理论。我在其他情况下经常使用此OnClickListener。

====================

如果按钮具有不同的ID,则可以使用相同的OnClickListener。这是容易的部分。

一个OnClickListener可以调用另一个OnClickListener。

像这样...

OnClickListener other;
OnClickListener demo = new OnClickListener() {
    void onClick(View v) {
        if(other != null)other.onClick(v);
    }
}

因此,在您的Activity中设置一个ArrayList。当Fragment被创建并附加到Activity时,将您的OnClickListener放入其中。当Fragment销毁并分离时,删除您的OnClickListener。

ArrayList<OnClickListener> list = new ArrayList<>();
OnClickListener demo = new OnClickListener() {
    void onClick(View v) {
        for(OnClickListener demo : list) {
             demo.onClick(v);
        }
    }
};

这个模块应该能够满足你的要求。也许需要修复一些代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接