如何在Fragment中捕获onclick事件

时间:2013-05-15 23:35:17

标签: java android android-layout android-intent

我在xml布局文件中声明了许多按钮,并将此布局用于片段。


button android:id="@+id/button1" android:onClick="onClickButton"/>
button android:id="@+id/button2" android:onClick="onClickButton"/>
....
button android:id="@+id/buttonN" android:onClick="onClickButton"/>

令人失望的是,“onClickButton”事件在主机活动中被捕获,而不是在我的片段中。当然,在我的片段中,我可以手动解决此问题,如下所示:


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_content, container, false);

    Button button1 = (Button) view.findViewById(R.id.button1);
    button1.setOnClickListener(...);

    ... etc

    Button buttonN = (Button) view.findViewById(R.id.buttonN);
    buttonN.setOnClickListener(...);

有没有明确的方法来处理Fragment中的onClickbutton事件?

3 个答案:

答案 0 :(得分: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 :(得分:1)

不幸的是,只需使用Android SDK就可以在代码中执行此操作。

你尝试过定制的东西吗? AndroidAnnotationsRoboGuice使其不那么冗长。

答案 2 :(得分: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);
        }
    }
};

此模块应执行您想要的操作。也许修复一些代码。