我是初学者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)
答案 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);