不幸的是<app>已停止工作(溢出菜单)

时间:2017-06-16 09:21:50

标签: java android classcastexception

我是初学者android程序员。我正在学习溢出菜单概念,通过制作一个应用程序,当菜单中的三个项目中的一个被选中时,它会改变背景颜色。我不明白为什么我的应用程序从选项中选择一个项目后关闭,并显示上面的错误。

这是我的MainActivity.java文件

package com.awani.overflowmenu;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.RelativeLayout;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;



public class MainActivity extends AppCompatActivity {

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

@Override
public boolean onCreateOptionsMenu(Menu menu){
    getMenuInflater().inflate(R.menu.main_menu,menu);
  //  return super.onCreateOptionsMenu(menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item){
    RelativeLayout main_view = (RelativeLayout) findViewById(R.id.main_view);

    //test which item is selected by user
    switch (item.getItemId()){
        case R.id.menu_red:
            if(item.isChecked())
                item.setChecked(false);
            else
                item.setChecked(true);
            main_view.setBackgroundColor(Color.RED);
            return true;

        case R.id.menu_green:
            if(item.isChecked())
                item.setChecked(false);
            else
                item.setChecked(true);
            main_view.setBackgroundColor(Color.GREEN);
            return true;

        case R.id.menu_yellow:
            if(item.isChecked())
                item.setChecked(false);
            else
                item.setChecked(true);
            main_view.setBackgroundColor(Color.YELLOW);
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }


}

}

在MainActivity.java中,在函数onOptionsItemSelected(菜单菜单)中,我在(RelativeLayout)findviewbyid(R.id.main_view)下面得到红线。它说'意外转换为RelativeLayout.but gradle成功构建。

我已经看到其他答案,但与我的情况无关

事件日志说明了这一点:

 FATAL EXCEPTION: main
                                                                                    Process:com.awani.overflowmenu, PID: 26829
                                                                    java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView cannot be cast to android.widget.RelativeLayout
                                                                        at com.awani.overflowmenu.MainActivity.onOptionsItemSelected(MainActivity.java:30)
                                                                        at android.app.Activity.onMenuItemSelected(Activity.java:3201)
                                                                        at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:408)
                                                                        at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
                                                                        at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:113)
                                                                        at android.support.v7.app.AppCompatDelegateImplV9.onMenuItemSelected(AppCompatDelegateImplV9.java:679)
                                                                        at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
                                                                        at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:156)
                                                                        at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:969)
                                                                        at android.support.v7.view.menu.MenuPopup.onItemClick(MenuPopup.java:127)
                                                                        at android.widget.AdapterView.performItemClick(AdapterView.java:340)
                                                                        at android.widget.AbsListView.performItemClick(AbsListView.java:1530)
                                                                        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3698)
                                                                        at android.widget.AbsListView$3.run(AbsListView.java:5682)
                                                                        at android.os.Handler.handleCallback(Handler.java:739)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                        at android.os.Looper.loop(Looper.java:145)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:6917)
                                                                        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:1404)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

3 个答案:

答案 0 :(得分:1)

正如错误日志所示

  

android.support.v7.widget.AppCompatTextView无法强制转换为android.widget.RelativeLayout

您尝试将TextView强制转换为RelativeLayout。这是不可能的。检查layout_main.xml并为RelativeLayout设置android:id。然后使用该id在java代码中获取引用。

答案 1 :(得分:0)

你能提供menu/main_view.xml档吗?

java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView cannot be cast to android.widget.RelativeLayout

这句话描述了你得到的错误。

答案 2 :(得分:0)

java.lang.ClassCastException:android.support.v7.widget.AppCompatTextView无法强制转换为android.widget.RelativeLayout

您的R.id.main_view不是亲戚,而是AppCompatTextView。

更改此行

RelativeLayout main_view = (RelativeLayout) findViewById(R.id.main_view);

用这个

AppCompatTextView main_view = (AppCompatTextView) findViewById(R.id.main_view);