【问题标题】:the Android Studio OnClickListener doesn't workAndroid Studio OnClickListener 不起作用
【发布时间】:2021-03-17 09:09:21
【问题描述】:

当我点击“开始”按钮时没有任何反应,应用程序突然关闭。我认为 View.OnClickListener 不起作用,但我找不到解决方法。

package com.example.myquiz;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.res.ResourcesCompat;

import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView title;
    private Button start;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        title = findViewById(R.id.main_title);
        start =  findViewById(R.id.ma_startB);

        Typeface typeface = ResourcesCompat.getFont(this,R.font.blacklist);
        title.setTypeface(typeface);

        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,CategoryActivity.class);
                startActivity(intent);
            }
        });
    }
}

我在 Logcat 中遇到了这个错误: error screenshot

这是 CategoryActivity 类的代码,这是我得到错误的地方,但我真的不明白问题出在哪里。

package com.example.myquiz;

import android.os.Bundle;
import android.view.MenuItem;
import android.widget.GridView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.List;

public class CategoryActivity extends AppCompatActivity {
    private  GridView catGrid;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_category);

        androidx.appcompat.widget.Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle("Categories");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        catGrid = findViewById(R.id.catGridView);

        List<String> catList = new ArrayList<>();

        catList.add("Cat 1");
        catList.add("Cat 2");
        catList.add("Cat 3");
        catList.add("Cat 4");
        catList.add("Cat 5");
        catList.add("Cat 6");

        CatGridAdapter adapter = new CatGridAdapter(catList);
        catGrid.setAdapter(adapter);

    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if(item.getItemId() == android.R.id.home)
        { CategoryActivity.this.finish();}
        return super.onOptionsItemSelected(item);
    }
}

【问题讨论】:

  • 您是否尝试过识别变量?就像 TextView 的标题和按钮启动一样,所以编译器可以知道如何调用你的 OnClickListener。
  • 运行后,打开屏幕底部的“logcat”并检查是否有任何大的红色文本。那就是你的错误所在。附上这个问题的截图。
  • 点击监听器工作正常错误是在类别活动中。点击错误日志中的蓝色文本并检查问题出在哪里。
  • @SatvikVejendla 我附上了截图,你可以看看吗?
  • @MajidAli 我附上了那个类的代码

标签: java android-studio button onclicklistener android-toolbar


【解决方案1】:

点击监听器工作正常,查看错误日志,CategoryActivity 类的启动导致应用崩溃:

Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor...

这告诉CategoryActivity 内部的ActionBar / ToolBar 设置了两次。可能(如果没有,请分享课程代码)您可以删除 setSupportActionBar() 或将 CategoryActivity 的主题更改为:Theme.MaterialComponents.Light.NoActionBar 以查看您是否在单击按钮后运行 Activity

【讨论】:

  • 我删除了 setSupportActionBar() 并且成功了,非常感谢!
猜你喜欢
  • 2017-06-15
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
相关资源
最近更新 更多