Java 按钮点击导致应用程序崩溃
我刚刚设置了一个onClick方法,它是在activity类中编写的,每当单击按钮时就会调用它。甚至在进入方法之前,应用程序就崩溃了 单击浮动操作按钮时收到的错误消息Java 按钮点击导致应用程序崩溃,java,android,xml,Java,Android,Xml,我刚刚设置了一个onClick方法,它是在activity类中编写的,每当单击按钮时就会调用它。甚至在进入方法之前,应用程序就崩溃了 单击浮动操作按钮时收到的错误消息 java.lang.IllegalArgumentException: Expected receiver of type com.example.bob.vexteamqueuing.AdminControl, but got android.support.v7.view.ContextThemeWrapper java.la
java.lang.IllegalArgumentException: Expected receiver of type com.example.bob.vexteamqueuing.AdminControl,
but got android.support.v7.view.ContextThemeWrapper java.lang.IllegalArgumentException:
Expected receiver of type com.example.bob.vexteamqueuing.AdminControl, but got android.support.v7.view.ContextThemeWrapper
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
活动的XML代码:
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
清单文件-可能不需要,但仅提供
从布局中删除您的
android:onClick=“createnewtourname”
事件应该可以解决您的问题
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_input_add"
android:clickable="true" />
同样的问题也发生在这个问题中,并且使用listener解决了这个问题
希望这有帮助 为什么不以典型的方式做呢?通过声明
public class AdminControl extends AppCompatActivity {
//....
FloatingActionButton mFAB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin_control);
Toolbar b = (Toolbar) findViewById(R.id.toolbar);
//....
mFAB = (FloatingActionButton) findViewById(R.id.fab);
mFAB.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent newIntent = new Intent(this, TournamentCreator.class);
startActivity(newIntent);
}
});
}
并使用XML作为浮动按钮,如下所示:
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_input_add"
/>
这是一种常见且干净的方法,希望我能帮上忙。以前的解决方案(由@GueorguiObregon和@MuhammadFaisalHyder提供)有效,但不是我希望的。我发现问题来自于将android:theme
属性设置为视图(在我的例子中),并且与AppCompat
库相关(请参阅)
因此,我只是从这一行中删除了android:
namespace(从视图的style
):
@style/someTheme
让它看起来像:
<item name="theme">@style/someTheme</item>
@style/someTheme
而且效果很好
令人惊讶的是,问题只存在于高级API(我测试了23个)和低级API(我测试了16个和19个)上,这两种方式(有或没有android:
namespace)都可以工作
另外,如果要直接将
主题
插入元素(不使用样式),请参见下面的@MateiSuica注释。请显示代码,尤其是TournamentCreator
活动
类的onCreate
。如果显示整个堆栈跟踪,我们可以看到崩溃发生的确切位置。即使在它进入方法之前,也会抛出异常,应用程序崩溃。哎呀,看起来我们几乎同时回答:虽然这已经足够接近成为最佳解决方案,但我还要补充一点,如果你将主题直接放在FAB元素上,您应该使用app:themeA developer添加了一个折叠工具栏布局,由于这个原因,在某些设备上失败了。我们删除了主题,直接在布局上编辑了工具栏样式,一切都很好。
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_input_add"
android:clickable="true" />
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin_control);
Toolbar b = (Toolbar) findViewById(R.id.toolbar);
b.setTitle("Tournaments");
setSupportActionBar(b);
ref = AdminLogin.firebase.child("users").child(AdminLogin.firebase.getAuth().getUid());
if (tournaments == null){
tournaments = new ArrayList<>();
}
FloatingActionButton myFab = (FloatingActionButton)findViewById(R.id.fab);
myFab.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
createNewTournament(v);
}
});
}
public class AdminControl extends AppCompatActivity {
//....
FloatingActionButton mFAB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin_control);
Toolbar b = (Toolbar) findViewById(R.id.toolbar);
//....
mFAB = (FloatingActionButton) findViewById(R.id.fab);
mFAB.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent newIntent = new Intent(this, TournamentCreator.class);
startActivity(newIntent);
}
});
}
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_input_add"
/>
<item name="android:theme">@style/someTheme</item>
<item name="theme">@style/someTheme</item>