2017-06-16 86 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);