简体   繁体   English

如何从Activity为Fragment的开关设置OnClickListener?

[英]How to set OnClickListener from Activity for Fragment's switch?

I have an Activity which has a Fragment. 我有一个带有片段的活动。 This Fragment has different switches and buttons. 该片段具有不同的开关和按钮。 Now I can access these Fragment's elements from the Activity. 现在,我可以从“活动”中访问这些Fragment的元素。

Now, I want to set an OnClickListener on the Fragment's switch but in the Activity itself. 现在,我想在Fragment的开关上但在Activity本身中设置一个OnClickListener。 Problem is, from the Activity second time onward switch is not listening. 问题是,从“活动”第二次开始,开关没有监听。

For switch I recommend OnCheckedChangeListener instead of OnClickListener for listenning events 对于开关,我建议使用OnCheckedChangeListener而不是OnClickListener来监听事件

 mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                 // do something when check is selected
            } else {
                 //do something when unchecked
            }
        }
    });

Hope this help 希望有帮助

You can have your onClickListener in a method in you Activity class like below: 您可以将Activity类的方法中的onClickListener设置为如下所示:

public OnClickListener switchClickListener()
{
    return new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            //code here
        }
    };
}

And you can call this method from your fragment and set the Switch OnClicklistener with the code below: 您可以从片段中调用此方法,并使用以下代码设置Switch OnClicklistener:

switch.setOnClickListener( ((Activity) getActivity).switchClickListener());

You can implement OnClickListener at your actvity and on attach you can use that to call onclicklistener. 您可以在活动时实现OnClickListener,并且在附加时可以使用它来调用onclicklistener。 At activity- 活动中

public class MainActivity extends AppCompatActivity implements OnClickListener {
....
@Override
public void onClick(View view) {
    switch (view.getId()){

    }
}
}

And at fragment- 而在片段-

MainActivity mainActivity;
Button button;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_test, container, false);
    button = (Button) view.findViewById(R.id.button);
    return view;
}


@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    mainActivity = (MainActivity) activity;
    button.setOnClickListener(mainActivity);
}

Note - The above code works only when your fragment is attached with activity. 注意-以上代码仅在您的片段附有活动时才有效。 Recommended way is to use callbacks. 推荐的方法是使用回调。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM