android Switch setChecked无效

时间:2017-10-27 20:12:03

标签: java android view android-seekbar android-switch

我有一个房间列表可以打开/关闭灯光。 如果所选房间有可调光,在列表的底部我会显示一个SeekBar。 我的ListFragment:

 @Override
    public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(getLayoutId(), container, false);
        final ListView lv = (ListView) view.findViewById(android.R.id.list);
        registerForContextMenu(lv);
        dimmerBar = (AppCompatSeekBar) view.findViewById(R.id.dimmerBar);
        dimmerBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                if (selectedLighting != null && selectedLighting.getTypeId() == LightingTypes.Dimmer) {
                    try {
                        final int dimmerState = seekBar.getProgress();
                        selectedLighting.setState(context, dimmerState);

                        getActivity().runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Switch state = (Switch) selectedRowView.findViewById(R.id.state);
                                state.setChecked(dimmerState > 0);
                            }
                        });

                    } catch (Exception e) {
                        e.printStackTrace();
                        showException(e);
                    }
                }
            }
        });
        return view;
    }

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    v.setSelected(true);
    try {
        selectedRowView = v;
        Activity activity = getActivity();
        if (activity != null && adapter != null) {
            selectedLighting = adapter.getItem(position);
            if (selectedLighting.getTypeId() == LightingTypes.Dimmer) {
                dimmerBar.setVisibility(View.VISIBLE);
                dimmerBar.setProgress(selectedLighting.getDimmerState());
            } else {
                dimmerBar.setVisibility(View.GONE);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        showException(e);
    }
}

要创建列表,我正在使用以下ArrayAdapter:

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.rowlayout_lighting, parent, false);

        LightingModel lighting = values.get(position);
        TextView textView = (TextView) rowView.findViewById(R.id.name);
        final Switch state = (Switch) rowView.findViewById(R.id.state);

        textView.setText(lighting.getName());
        state.setChecked(lighting.getState());

        state.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                LightingModel lighting = getItem(position);
                try {
                    lighting.setState(context, isChecked);
                    if (stateChangedListener != null) {
                        stateChangedListener.onStateChanged(lighting);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        return rowView;
    }

that is my screen

如果我将滑块从0移动到x或从x移动到0,我会将swich状态更改为on或off。但setChecked无效。 我的代码怎么了?

0 个答案:

没有答案