Android 应用程序 - 按钮正在打开 activity 但它正在崩溃

Android App - button is opening the activity but it's crashing

我创建了一个滚动 activity,但是当我调试应用程序并单击按钮打开 activity 时,出现错误。基本上,它会使整个应用程序崩溃。但是,下面是我的代码。

是否因为它是滚动的 activity 而不是空的 activity?

这是 java 文件:

news.java

package com.example.it5.foothillers;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

public class news extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_news);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);

       FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
       fab.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                       .setAction("Action", null).show();
           }
       });
   }
}

main_acitivity.java

package com.example.it5.foothillers;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener
{

   Button button;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
           button = (Button)findViewById(R.id.button);
           button.setOnClickListener(this);

   }

   private void buttonClick() {
       startActivity(new Intent("it5.foothillers.news"));
   }

   @Override
   public void onClick(View v) {
       switch (v.getId()){
           case R.id.button:
               buttonClick();
               break;

       }

   }

}

清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.it5.foothillers">

   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">

       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>

       <activity android:name=".news">
           <intent-filter>
               <action android:name="it5.foothillers.news" />
               <category android:name="android.intent.category.DEFAULT" />
           </intent-filter>
       </activity>

   </application>

</manifest>

日志:

03-30 12:01:49.871 2122-2122/com.example.it5.foothillers E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.it5.foothillers, PID: 2122
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.it5.foothillers/com.example.it5.foothillers.news}: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
   at android.app.ActivityThread.access0(ActivityThread.java:151)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:135)
   at android.app.ActivityThread.main(ActivityThread.java:5254)
   at java.lang.reflect.Method.invoke(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
   at android.support.v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:197)
   at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:129)
   at com.example.it5.foothillers.news.onCreate(news.java:17)
   at android.app.Activity.performCreate(Activity.java:5990)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
   at android.app.ActivityThread.access0(ActivityThread.java:151) 
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
   at android.os.Handler.dispatchMessage(Handler.java:102) 
   at android.os.Looper.loop(Looper.java:135) 
   at android.app.ActivityThread.main(ActivityThread.java:5254) 
   at java.lang.reflect.Method.invoke(Native Method) 
   at java.lang.reflect.Method.invoke(Method.java:372) 
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

开始 activity 的最简单方法是将意图更改为:

startActivity(new Intent(MainActivity.this, news.class));

堆栈跟踪显示您正在尝试添加另一个 ActionBar,而应用程序的主题已经提供了一个。

因此,您可以在清单上的 activity 声明中更改主题以不使用 ActionBar,例如:

   <activity android:name=".news"
             android:theme="@style/AppTheme.NoActionBar">
       <intent-filter>
           <action android:name="it5.foothillers.news" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
   </activity>

或者您只是从 activity 代码和 activity_news.xml 中删除工具栏(因为您以后不会使用它):

protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_news);

       FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
       fab.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                       .setAction("Action", null).show();
           }
       });

Intent intent=new Intent(MainActivity.this,news.class); startActivity(intent);

Mainifest.xml

<activity android:name="com.example.it5.foothillers.news" ></activity>

This Activity already has an action bar supplied by the window decor.

您的异常消息清楚地告诉您,您已经有一个 Toolbar 作为 Activity 主题的一部分。

如果你想调用 setSupportActionBar,你应该在 styles.xml 文件中设置这样的主题。

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

你也可以只删除这两行

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

并替换为

ActionBar toolbar = getSupportActionBar();