Android: при использовании setOnCheckedChangeListener на коммутаторах я получаю сообщение «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'.

Я импортировал необходимые (и рекомендованные в качестве ответов для других людей) классы. Я работаю с API для Android 4.0 и выше. Я в основном хочу, чтобы метод onClick был повторно реализован через прослушиватель, потому что слушатель работает как с кликами, так и смахиваниями, тогда как onClick работает только с кликами, а не свайпами.


person Koustav Samaddar    schedule 24.04.2015    source источник


Ответы (3)


Вы должны инициализировать Switch внутри onCreate()

person Mohit Rajput    schedule 24.04.2015
comment
и поместите туда же swi.setOnCheckedChangeListener() и последующие строки, вплоть до точки с запятой :) - person Klotor; 24.04.2015

шаг

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

        }
    });

в onCreate. Вы не можете вызвать findViewById до создания активности, а swi.setOnCheckedChangeListener(..); не является допустимым оператором.

person Blackbelt    schedule 24.04.2015

Замените приведенный ниже код

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

by

        switchButton.setOnCheckedChangeListener( new SwitchButton.OnCheckedChangeListener() {

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

это будет работать !

person Dhananjay    schedule 14.02.2017