监听片段中的活动按钮单击

Zuh*_*ayr 5 java android listener fragment android-fragments

我刚刚开始了解片段,我的活动是将1000多行代码转换为片段。

我想知道是否有任何简单的方法可以让我的片段监听其父活动的XML中的按钮。我尝试只是在片段的onCreateView按钮ID中添加一个常规侦听器,但是(预期)给了我一个空指针异常。

我确实知道OnSearchClickListener执行此操作的方法,但可能需要花费大量时间进行手动重构才能实现所需的功能(至少从我可以告知其用法的情况下,我很乐意犯错),所以我我想知道是否有人知道其他任何方法以非重复的方式完成此任务。

Emr*_*ürk 5

您可以尝试通过以下方式获取活动中视图的参考:

View view = getActivity().findViewById(R.id.view_in_activity);
Run Code Online (Sandbox Code Playgroud)

然后添加侦听器:

view.setOnClickListener(new OnClickListener() {
    void onClick(View v) {
        // Perform some action
    }
})
Run Code Online (Sandbox Code Playgroud)


小智 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);
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

在活动中做这样的...

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.
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 它的问题是从活动到片段的点击而不是从片段到活动的点击 (2认同)