2017-06-16 90 views
-3

我是一名初学android程序员。我正在学习溢出菜单的概念,通过制作一个应用程序来改变背景颜色,当菜单中的三项之一被选中时。我不明白为什么我的应用程序从选项中选择一个项目后关闭,并显示以上错误。不幸的<app>已停止工作(溢出菜单)

这里是我的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) .it说'意外投到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) 
+0

可以张贴主要活动你的XML布局? – mdb

+0

异常是“android.support.v7.widget.AppCompatTextView不能转换为android.widget.RelativeLayout”,你的代码是(RelativeLayout)findViewById(R.id.main_view);'(至少你已经发布了什么这里),但你不明白该怎么办? – Tom

+0

检查你的xml视图id(R.id.main_view) –

回答

1

由于错误日志表明

android.support.v7.widget .AppCompatTextView无法投射到android.widget.RelativeLayout

您试图将TextView转换为RelativeLayout。这不可能。检查你的layout_main.xml并为RelativeLayout设置android:id。然后使用该ID在您的Java代码中获取参考。

0

你能提供menu/main_view.xml文件吗?

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

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

0

java.lang.ClassCastException:android.support.v7.widget.AppCompatTextView不能转换到android.widget.RelativeLayout

R.id.main_view不是RelativeLayout的它是一个AppCompatTextView。

改变这一行

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

与此

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