3

我试图在我的 Fragment 类中接收复选框选择,但是我无法使用我在活动中使用的方式(android:onClick="onCheckboxClicked"从 a 调用方法layout.xml),因为每次使用此方法时我都会得到“方法 onCheckboxClicked not found”叫。

public void onCheckboxClicked(View view) {
    // Is the view now checked?
    boolean checked = ((CheckBox) view).isChecked();

    // Check which checkbox was clicked
    switch(view.getId()) {
        case (R.id.checkBox_wifi):
            if (checked)    {
                editor.putBoolean("wifi_on_off", true);
            }
            else    {
                editor.putBoolean("wifi_on_off", false);
            }
            break;

    }

    editor.apply();
}

所以,我已经实现了 View.OnClickListener,但这并没有得到任何复选框检查/取消选中:

 @Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.checkBox_wifi:
            boolean checked = ((CheckBox) view).isChecked();

            if (checked) {
                editor.putBoolean("wifi_on_off", true);
            } else {
                editor.putBoolean("wifi_on_off", false);
            }

            editor.apply();
            break;

    }
}  
4

4 回答 4

5
    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragmentlayout, container,false);

    CheckBox checkboxvariable=(CheckBox)rootView.findViewById(R.id.checkboxid);

    checkboxvariable.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {


            if(v.isChecked()){ //do this}
            else { //do this }

        }
    });
    return rootView;
}

checkboxvariable.setOnClickListener(this.getActivity());

在 onClick 中可以获取资源 id,R.id.checkboxid。

于 2013-10-14T10:06:15.327 回答
2

任何onClickXML 属性都意味着必须在活动中找到该方法,而不是在片段中,而不是在视图中。所以在我看来,你有两个选择:

  1. 在 Activity 中添加方法,并在实现中尝试查找片段,如果找到,则将调用委托给片段。
  2. 删除 XMLonClick并依赖OnClickListeners您在 Java 代码中定义的内容。至少在这个线程中已经讨论了这个主题。
于 2013-10-14T10:11:40.813 回答
1
public class MyFragment extends Fragment {

    CheckBox myCheckBox;

    @Override
    public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle saveInstanceState) {
        rootView = layoutInflater.inflate(R.layout.your_fragment_layout, container, false);
        ...
        ...
        initViews();
        return rootView;
    }

    private void initViews() {
        myCheckBox = (CheckBox) rootView.findViewById(R.id.my_check_box);
        myCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if (isChecked)
                    Log.d("TAG=>isChecked", "True");//replace your own stuffs here
                else
                    Log.d("TAG=>isChecked", "false");//replace your own stuffs here
            }
        });
    }
}

您可以将此侦听器设置为 n 个复选框!!!

于 2018-03-09T07:33:45.263 回答
0

只需使用您的自定义侦听器

CompoundButton.OnCheckedChangeListener

在任何其他视图中然后Activity。下面的代码示例

public class MyFragment extends Fragment{

  public View onCreateView(...){
    ...
    CheckBox cbFilter = (CheckBox) rootView.findViewById(R.id.chb_rt_is_filter);
    cbFilter.setOnCheckedChangeListener(myCheckboxListener);
    return rootView;
  }

   private CompoundButton.OnCheckedChangeListener myCheckboxListener = new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        switch (buttonView.getId()){
            case R.id.chb_rt_is_filter:
                break;
            default:
                break;
        }
    }
};
}
于 2015-11-17T21:23:34.600 回答