簡體   English   中英

如何從Activity為Fragment的開關設置OnClickListener?

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

我有一個帶有片段的活動。 該片段具有不同的開關和按鈕。 現在,我可以從“活動”中訪問這些Fragment的元素。

現在,我想在Fragment的開關上但在Activity本身中設置一個OnClickListener。 問題是,從“活動”第二次開始,開關沒有監聽。

對於開關,我建議使用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
            }
        }
    });

希望有幫助

您可以將Activity類的方法中的onClickListener設置為如下所示:

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

您可以從片段中調用此方法,並使用以下代碼設置Switch OnClicklistener:

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

您可以在活動時實現OnClickListener,並且在附加時可以使用它來調用onclicklistener。 活動中

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

    }
}
}

而在片段-

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);
}

注意-以上代碼僅在您的片段附有活動時才有效。 推薦的方法是使用回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM