从片段内部听取活动按钮单击

时间:2017-02-23 10:13:31

标签: java android android-fragments fragment listener

我刚刚开始学习片段,我有一个活动,这是1000多行代码,我已经转换为片段。

我想知道是否有任何简单的方法允许我的片段监听驻留在其父活动的XML中的按钮。我尝试在片段的onCreateView中添加一个常规侦听器,其中包含按钮的ID,但它(预期)会给我一个空指针异常。

我知道这样做的OnSearchClickListener方法,但可能需要花费很多时间进行手动重构才能达到我所需要的水平(至少我可以告诉它的用法,我会是很高兴是错的),所以我想知道是否有人知道任何其他方法以非重复的方式完成这项工作。

4 个答案:

答案 0 :(得分:5)

您可以尝试以这种方式获取活动视图的引用:

View view = getActivity().findViewById(R.id.view_in_activity);

然后添加监听器:

view.setOnClickListener(new OnClickListener() {
    void onClick(View v) {
        // Perform some action
    }
})

答案 1 :(得分:5)

在Fragment中这样做..

public class Myfragment extends Fragment {

    public interface Callback {
        public void onButtonClicked(View radiobtn);
    }

    private Callback callback;

    @Override
    public void onAttach(Activity ac) {
        super.onAttach(ac);
        callback = (Callback) ac;
    }

    @Override
    public void onDetach() {
        callback = null;
        super.onDetach();
    }

    radiobtn.setOnClickListener(new OnClickListener() {
        public void onClick(View view) {
            if (callback != null) {
                callback.onButtonClicked(view);
            }
        }
    });
}

在活动中这样做......

public class Myfragment extends Activity implements MyFragment.Callback{

    public void onButtonClicked(View btn) {
        // The radiobutton in MyFragment has been clicked
        myButton.setEnabled(true); // or something like this.
    }
}

答案 2 :(得分:3)

定义名为ClickListenerOnActivity的接口包含一个名为onClickInActivity(View v)的方法,并在片段中实现该方法。单击活动中的按钮时,调用此接口的方法。

您可以查看此example以了解如何实施界面。

答案 3 :(得分:2)

尽管Emre Akturk的回答并不错,但这不是最佳做法,因此您可以将Fragment附加到另一个Activity,然后Activity View 1}}可能没有interface。因此,最好的方法是使用Fragment。让您的onClickListener实现所需的界面,然后在Button的{​​{1}}中,调用Fragment的界面。