onCheckedChanged似乎不起作用

时间:2015-04-04 20:07:47

标签: android

我有一个复选框。它被设置为true或false,具体取决于任务是否完成(手动更改)。任务完成后,我希望textview标签改变frmo未完成,反之亦然。所以我有以下代码。当他们点击复选框时,onCheckedChanged方法会被触发。它选择设置字符串取决于它是正确的真或假。但它刚刚退出。我在日志或屏幕上没有错误,但是当我在onCheckedChanged方法中设置字符串后逐步执行该程序时,它只是完全退出getView方法。我不明白出了什么问题。在前几行中有一个小问题,如果框是真或假的话,设置的逻辑并不完全正确,但没关系,我可以解决这个问题。我无法理解为什么在点击复选框后我无法更新标签。任何帮助都会很棒。

final CheckBox statusView = (CheckBox)convertView.findViewById(R.id.statusCheckBox);
        //statusView.setChecked(true);
        if(toDoItem.getStatus().toString().compareTo(ToDoItem.Status.DONE.toString()) == 0)
            statusView.setChecked(true);
        else
            statusView.setChecked(false);

        // TODO - Must also set up an OnCheckedChangeListener,
        // which is called when the user toggles the status checkbox

        statusView
                .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView,
                            boolean isChecked) {
                        Log.i(TAG,"Entered onCheckedChanged()");

                        if(isChecked)
                            statusLabelValue = "Done";
                        else
                            statusLabelValue = "Not Done";
                    }
                });

        TextView statusLabel = (TextView)convertView.findViewById(R.id.StatusLabel);
        statusLabel.setText(statusLabelValue);

1 个答案:

答案 0 :(得分:2)

您必须在侦听器中更改textview的文本:

    statusView
            .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {
                    Log.i(TAG,"Entered onCheckedChanged()");

                    if(isChecked)
                        statusLabelValue = "Done";
                    else
                        statusLabelValue = "Not Done";
                    ((TextView)(convertView.findViewById(R.id.StatusLabel))).setText(statusLabelValue);
                }
            });