我不知道为什么,但我得到这个异常:
java.lang.IllegalStateException:找不到在活动课android.view.ContextThemeWrapper为的onClick处理方法onButtonClick(视图)在视图类android.widget.Button ID为 button19
在我的应用程序,我不知道如何解决它。出于某种原因,它只是引发此异常在平板电脑布局。有什么建议?
这里是layout.xml
< RelativeLayout的 机器人:layout_height =FILL_PARENT 机器人:layout_width =FILL_PARENT 的xmlns:机器人=http://schemas.android.com/apk/res/android 的xmlns:定制=http://schemas.android.com/apk/res-auto 机器人:ID =@ + ID / RL 机器人:主题=@风格/ Base.Theme.AppCompat.Light> < com.example.czhou.myapplication2.SudokuBoardView 机器人:ID =@ + ID /板 机器人:layout_width =match_parent 机器人:layout_height =match_parent 定制:mCellSize =40dp 定制:mOrientationLandscape =真 机器人:layout_alignParentTop =真 机器人:layout_alignParentLeft =真 机器人:layout_alignParentStart =真/> <按钮 机器人:layout_width =70dp 机器人:layout_height =70dp 机器人:文字=1 机器人:ID =@ + ID / button10 机器人:背景=@绘制/ button_background 安卓的onClick =onButtonClick 机器人:layout_alignParentTop =真 机器人:layout_toRightOf =@ + ID /板 机器人:layout_toEndOf =@ + ID /板/> <按钮 机器人:layout_width =70dp 机器人:layout_height =70dp 机器人:文字=2 机器人:ID =@ + ID / button11 机器人:背景=@绘制/ button_background 安卓的onClick =onButtonClick 机器人:layout_below =@ + ID / button10 机器人:layout_toRightOf =@ + ID /板 机器人:layout_toEndOf =@ + ID /板/> <按钮 机器人:layout_width =70dp 机器人:layout_height =70dp 机器人:文字=3 机器人:ID =@ + ID / button12 机器人:背景=@绘制/ button_background 安卓的onClick =onButtonClick 机器人:layout_below =@ + ID / button11 机器人:layout_toRightOf =@ + ID /板 机器人:layout_toEndOf =@ + ID /板/> <按钮 机器人:layout_width =70dp 机器人:layout_height =70dp 机器人:文字=4 机器人:ID =@ + ID / button13 机器人:背景=@绘制/ button_background 安卓的onClick =onButtonClick 机器人:layout_below =@ + ID / button12 机器人:layout_toRightOf =@ + ID /板/> <按钮 机器人:layout_width =70dp 机器人:layout_height =70dp 机器人:文字=5 机器人:ID =@ + ID / button14 机器人:背景=@绘制/ button_background 安卓的onClick =onButtonClick 机器人:layout_below =@ + ID / button13 机器人:layout_toRightOf =@ + ID /板/> <按钮 机器人:layout_width =70dp 机器人:layout_height =70dp 机器人:文字=6 机器人:ID =@ + ID / button15 机器人:背景=@绘制/ button_background 安卓的onClick =onButtonClick 机器人:layout_below =@ + ID / button14 机器人:layout_toRightOf =@ + ID /板/> <按钮 机器人:layout_width =70dp 机器人:layout_height =70dp 机器人:文字=7 机器人:ID =@ + ID / button16 机器人:背景=@绘制/ button_background 安卓的onClick =onButtonClick 机器人:layout_below =@ + ID / button15 机器人:layout_toRightOf =@ + ID /板/> <按钮 机器人:layout_width =70dp 机器人:layout_height =70dp 机器人:文字=8 机器人:ID =@ + ID / button17 机器人:背景=@绘制/ button_background 安卓的onClick =onButtonClick 机器人:layout_below =@ + ID / button16 机器人:layout_toRightOf =@ + ID /板/> <按钮 机器人:layout_width =70dp 机器人:layout_height =70dp 机器人:文字=9 机器人:ID =@ + ID / button18 机器人:背景=@绘制/ button_background 安卓的onClick =onButtonClick 机器人:layout_below =@ + ID / button17 机器人:layout_toRightOf =@ + ID /板 机器人:layout_toEndOf =@ + ID /板/> <按钮 机器人:layout_width =70dp 机器人:layout_height =70dp 机器人:paddingLeft =4DP 机器人:paddingRight =4DP 机器人:文本=保存&放大器;放大器;退出 机器人:ID =@ + ID / button19 机器人:背景=@绘制/ button_background 安卓的onClick =onButtonClick 机器人:layout_below =@ + ID /橡皮擦 机器人:layout_toRightOf =@ + ID / button10 机器人:layout_toEndOf =@ + ID / button10/> <的ImageButton 机器人:layout_width =70dp 机器人:layout_height =70dp 机器人:ID =@ + ID /橡皮擦 机器人:SRC =@绘制/ ic_action_eraser 机器人:背景=@绘制/ button_background 机器人:可点击=真 安卓的onClick =onImageButtonClick 机器人:layout_alignParentTop =真 机器人:layout_alignLeft =@ + ID / button19 机器人:layout_alignStart =@ + ID / button19/>< / RelativeLayout的>
下面是活动类
包com.example.czhou.myapplication2;进口android.app.FragmentManager;进口android.content.Context;进口android.content.res.Configuration;进口android.graphics.drawable.Drawable;进口android.graphics.drawable.GradientDrawable;进口android.os.Bundle;进口android.support.v7.app.ActionBar;进口android.support.v7.app.ActionBarActivity;进口android.util.DisplayMetrics;进口android.util.Log;进口android.view.Menu;进口android.view.MenuItem;进口android.view.View;进口android.view.ViewGroup;进口android.view.Window;进口android.view.WindowManager;进口android.widget.Button;进口android.widget.ImageButton;进口android.widget.RelativeLayout;进口java.io.FileOutputStream中;进口java.text.DateFormat中;进口java.text.SimpleDateFormat的;进口的java.util.Calendar;公共类SudokuGameActivity扩展ActionBarActivity { @覆盖 保护无效的onCreate(捆绑savedInstanceState){ super.onCreate(savedInstanceState); 的setContentView(R.layout.activity_game); 动作条动作条= getSupportActionBar(); actionBar.hide(); SudokuBoardView sudokuBoardView =(SudokuBoardView)findViewById(R.id.board); sudokuBoardView.setmFileName(this.getIntent()getStringExtra(文件)); } 公共无效onButtonClick(视图v){ Log.i(按钮,按钮点击!); 按钮B =(按钮)findViewById(v.getId()); Log.i(按钮,b.getText()的toString()); Log.i(按钮,在环!); SudokuBoardView sudokuBoardView =(SudokuBoardView)findViewById(R.id.board); 如果(b.getText()等于(储存并退出。)){ 保存游戏(); 完(); }其他{ sudokuBoardView.setCellValue(的Integer.parseInt(b.getText()的toString())); } } 公共无效onImageButtonClick(视图v){ 的ImageButton IB =(的ImageButton)findViewById(v.getId()); 如果(ib.getId()== R.id.eraser){ SudokuBoardView sudokuBoardView =(SudokuBoardView)findViewById(R.id.board); sudokuBoardView.setCellValue(0); }其他{ } } 公共无效秘技(){ FileOutputStream中的OutputStream; 字符串FN = getIntent()getStringExtra(文件)。 StringBuilder的SB =新的StringBuilder(); 的for(int i = 0; I< 9;我++){ 对于(INT J = 0; J< 9; J ++){ 如果(SudokuBoardView.cells [I] [J] .isEditable){ sb.append(,); }其他{ sb.append(。); } 如果(SudokuBoardView.cells [I] [J] .isWrong){ sb.append(!); }其他{ sb.append(。); } sb.append(SudokuBoardView.cells [I] [J] .getValue()); } } 尝试{ 的OutputStream = openFileOutput(FN,Context.MODE_PRIVATE); outputStream.write(sb.toString()的getBytes()); outputStream.close(); 的System.out.println(保存...); }赶上(例外五){ e.printStackTrace(); } }}
解决方案
我有一个非常类似的问题,它发生仅适用于Android L当它工作在旧version.Looks就像在5.0中的错误或无证功能罚款。
解决方案为我工作:
删除机器人:主题=@风格/ Base.Theme.AppCompat.Light
从layout.xml。在定义这样的AndroidManifest.xml中的应用程序元素应用程序的主题:
<应用 ... 机器人:主题=@安卓风格/ Theme.Holo.Light ...>
I'm not sure why but I'm getting this exception:
java.lang.IllegalStateException: Could not find a method onButtonClick(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'button19'
in my app and I don't know how to fix it. For some reason it only throws this exception in the tablet layout. Any suggestions?
Here is the layout.xml
<RelativeLayout
android:layout_height="fill_parent"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:id="@+id/rl"
android:theme="@style/Base.Theme.AppCompat.Light">
<com.example.czhou.myapplication2.SudokuBoardView
android:id="@+id/board"
android:layout_width="match_parent"
android:layout_height="match_parent"
custom:mCellSize="40dp"
custom:mOrientationLandscape="true"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="70dp"
android:layout_height="70dp"
android:text="1"
android:id="@+id/button10"
android:background="@drawable/button_background"
android:onClick="onButtonClick"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/board"
android:layout_toEndOf="@+id/board" />
<Button
android:layout_width="70dp"
android:layout_height="70dp"
android:text="2"
android:id="@+id/button11"
android:background="@drawable/button_background"
android:onClick="onButtonClick"
android:layout_below="@+id/button10"
android:layout_toRightOf="@+id/board"
android:layout_toEndOf="@+id/board" />
<Button
android:layout_width="70dp"
android:layout_height="70dp"
android:text="3"
android:id="@+id/button12"
android:background="@drawable/button_background"
android:onClick="onButtonClick"
android:layout_below="@+id/button11"
android:layout_toRightOf="@+id/board"
android:layout_toEndOf="@+id/board" />
<Button
android:layout_width="70dp"
android:layout_height="70dp"
android:text="4"
android:id="@+id/button13"
android:background="@drawable/button_background"
android:onClick="onButtonClick"
android:layout_below="@+id/button12"
android:layout_toRightOf="@+id/board" />
<Button
android:layout_width="70dp"
android:layout_height="70dp"
android:text="5"
android:id="@+id/button14"
android:background="@drawable/button_background"
android:onClick="onButtonClick"
android:layout_below="@+id/button13"
android:layout_toRightOf="@+id/board" />
<Button
android:layout_width="70dp"
android:layout_height="70dp"
android:text="6"
android:id="@+id/button15"
android:background="@drawable/button_background"
android:onClick="onButtonClick"
android:layout_below="@+id/button14"
android:layout_toRightOf="@+id/board" />
<Button
android:layout_width="70dp"
android:layout_height="70dp"
android:text="7"
android:id="@+id/button16"
android:background="@drawable/button_background"
android:onClick="onButtonClick"
android:layout_below="@+id/button15"
android:layout_toRightOf="@+id/board" />
<Button
android:layout_width="70dp"
android:layout_height="70dp"
android:text="8"
android:id="@+id/button17"
android:background="@drawable/button_background"
android:onClick="onButtonClick"
android:layout_below="@+id/button16"
android:layout_toRightOf="@+id/board" />
<Button
android:layout_width="70dp"
android:layout_height="70dp"
android:text="9"
android:id="@+id/button18"
android:background="@drawable/button_background"
android:onClick="onButtonClick"
android:layout_below="@+id/button17"
android:layout_toRightOf="@+id/board"
android:layout_toEndOf="@+id/board" />
<Button
android:layout_width="70dp"
android:layout_height="70dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:text="Save & Quit"
android:id="@+id/button19"
android:background="@drawable/button_background"
android:onClick="onButtonClick"
android:layout_below="@+id/eraser"
android:layout_toRightOf="@+id/button10"
android:layout_toEndOf="@+id/button10" />
<ImageButton
android:layout_width="70dp"
android:layout_height="70dp"
android:id="@+id/eraser"
android:src="@drawable/ic_action_eraser"
android:background="@drawable/button_background"
android:clickable="true"
android:onClick="onImageButtonClick"
android:layout_alignParentTop="true"
android:layout_alignLeft="@+id/button19"
android:layout_alignStart="@+id/button19" />
</RelativeLayout>
Here is the activity class
package com.example.czhou.myapplication2;
import android.app.FragmentManager;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import java.io.FileOutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class SudokuGameActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
SudokuBoardView sudokuBoardView = (SudokuBoardView) findViewById(R.id.board);
sudokuBoardView.setmFileName(this.getIntent().getStringExtra("FILE"));
}
public void onButtonClick(View v) {
Log.i("Button", "Button clicked!");
Button b = (Button) findViewById(v.getId());
Log.i("Button", b.getText().toString());
Log.i("Button", "in the loop!");
SudokuBoardView sudokuBoardView = (SudokuBoardView) findViewById(R.id.board);
if(b.getText().equals("Save & Quit")) {
saveGame();
finish();
}else {
sudokuBoardView.setCellValue(Integer.parseInt(b.getText().toString()));
}
}
public void onImageButtonClick(View v){
ImageButton ib = (ImageButton) findViewById(v.getId());
if (ib.getId() == R.id.eraser){
SudokuBoardView sudokuBoardView = (SudokuBoardView) findViewById(R.id.board);
sudokuBoardView.setCellValue(0);
} else {
}
}
public void saveGame(){
FileOutputStream outputStream;
String fn = getIntent().getStringExtra("FILE");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (SudokuBoardView.cells[i][j].isEditable){
sb.append(",");
} else {
sb.append(".");
}
if (SudokuBoardView.cells[i][j].isWrong){
sb.append("!");
} else {
sb.append(".");
}
sb.append(SudokuBoardView.cells[i][j].getValue());
}
}
try {
outputStream = openFileOutput(fn, Context.MODE_PRIVATE);
outputStream.write(sb.toString().getBytes());
outputStream.close();
System.out.println("Saving... ");
} catch (Exception e) {
e.printStackTrace();
}
}
}
解决方案
I had a very similar problem, it happens only on Android L while it works fine on the older version.Looks like a bug or undocumented feature in 5.0.
Solution that worked for me:
remove android:theme="@style/Base.Theme.AppCompat.Light"
from your layout.xml. Define your application theme in AndroidManifest.xml application element like that:
<application
...
android:theme="@android:style/Theme.Holo.Light"
... >