Android Studio 无法启动 Activity,无法强制转换为 android.view.View$OnClickListener

Android Studio Unable to Start Activity, Cannot cast to android.view.View$OnClickListener

提问人:Nick_struggles91 提问时间:8/14/2022 最后编辑:Nick_struggles91 更新时间:8/15/2022 访问量:318

问:

我们正在努力在我的在线课程中创建一个基本应用程序,我一直遇到这个问题,其中说明让我们键入一个带有 onClick @Override的方法。我能够从A.S.本身获得一种使用自动填充帮助的方法,但下一个方法不会自行解决。我在这门课上也遇到了其他问题,我知道这些说明已经有几年了。现在可能已经过时了?

我对 Android Java 和编码很陌生。该应用程序似乎试图错误地使用 onClick 方法。我将发布我正在处理的整个班级,因为我不确定问题到底在哪里。

package com.test.firstandroidapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;

public class InformationPageActivity extends AppCompatActivity {

    Button btnSave;
    Spinner spnSeason;
    SeekBar skbTemp;
    TextView lblSeekValue;
    Switch swchAllergy;


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

        spnSeason = (Spinner) findViewById(R.id.spnSeason);
        skbTemp = (SeekBar) findViewById(R.id.skbTemp);
        swchAllergy = (Switch) findViewById(R.id.swchAllergy);
        lblSeekValue = (TextView) findViewById(R.id.lblSeekValue);
        btnSave = (Button) findViewById(R.id.btnSave);

        btnSave.setOnClickListener((View.OnClickListener) this);

        skbTemp.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                String display = String.valueOf(progress);
                lblSeekValue.setText(display);
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
        });

    }
    @Override
    public void onClick(View v) {
        String season, allergies;
        int temperature;
        season = spnSeason.getSelectedItem().toString();
        temperature=skbTemp.getProgress();
        allergies = (String) (swchAllergy.isChecked() ? swchAllergy.getTextOn() : swchAllergy.getTextOff()); //if the switch is on then the user has allergies
        Intent intent = new Intent(InformationPageActivity.this, InformationResultsActivity.class); //pass information to the results activity
        intent.putExtra("season", season);
        intent.putExtra("temperature", temperature);
        intent.putExtra("allergies", allergies);
        this.startActivity(intent);
    }

}

这是转到我尝试打开的视图的主菜单类部分,onclicklistener 位于 onCreate 方法中,goInfo 是它自己的方法

            Button btnInfo = (Button) findViewById(R.id.btnInfo);
        btnInfo.setOnClickListener(new View.OnClickListener() {
                                       @Override
                                       public void onClick(View v) {
                                           goInfo();
                                       }
                                   }
        );
    }

    private void goInfo() {
        Intent intent = new Intent(MainMenuActivity.this, InformationPageActivity.class);
        this.startActivity(intent);
    }
Android 视图 投射 onclick onclicklistener

评论


答:

0赞 Nick_struggles91 8/15/2022 #1

我能够找到问题所在。我需要向 onclicklistener 的类添加一个 implements 语句。我正在回答我自己的问题,以防将来有人遇到同样的错误。这是我所做的。

我有问题的班级是

public class InformationPageActivity extends AppCompatActivity {

这会导致错误“java.lang.RuntimeException:无法启动活动 ComponentInfo{com.test.firstandroidapp/com.test.firstandroidapp.InformationPageActivity}:java.lang.ClassCastException:com.test.firstandroidapp.InformationPageActivity 无法转换为 android.view.View$OnClickListener”

我通过修复添加工具的类解决了这个问题

public class InformationPageActivity extends AppCompatActivity implements View.OnClickListener {