Android:在开关上使用 setOnCheckedChangeListener 时,我得到 'Cannot Resolve Symbol Error'

Android: When using setOnCheckedChangeListener on switches I get 'Cannot Resolve Symbol Error'

package com.example.koustav.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class MainActivity extends Activity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    Switch swi = (Switch) findViewById(R.id.swch);
    swi.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
    {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) //Line A
        {

        }
    });

    public void onClick(View view)
    {
        boolean isOn = ((Switch) view).isChecked();

        if (isOn)
        {
            ((TextView) findViewById(R.id.largey)).setTextColor(getResources().getColor(R.color.black));
        }
        else
        {
            ((TextView) findViewById(R.id.largey)).setTextColor(getResources().getColor(R.color.white));
        }

    }

}

我正在为这个项目使用 Android Studio。我已经在互联网上广泛搜索解决方案,但找不到。

我一直在尝试将 setOnCheckedChangeListener 用于 Switch 对象。但是,无论我尝试什么,我总是会收到 Cannot Resolve Symbol 'setOnCheckedChangeListener' 错误。此外,在 A 行,对象 buttonView 带有红色下划线,给出相同的错误 Cannot Resolve Symbol 'buttonView'.

我已经导入了必要的(并推荐作为其他人的答案)类。我正在使用 android 4.0 及更高版本的 API。我基本上希望通过侦听器重新实现 onClick 方法,因为侦听器同时适用于点击和滑动,而 onClick 仅适用于点击而不适用于滑动。

您必须在 onCreate()

中初始化 Switch

移动

  Switch swi = (Switch) findViewById(R.id.swch);
  swi.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
    {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) //Line A
        {

        }
    });

onCreate 中。在创建 activity 之前,您不能调用 findViewById,并且 swi.setOnCheckedChangeListener(..); 不是有效语句

替换下面的代码

        switchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SwitchButton switchButton = (SwitchButton)view;

来自

        switchButton.setOnCheckedChangeListener( new SwitchButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                SwitchButton switchButton = (SwitchButton) buttonView;

它会起作用的!