Java 按钮点击导致应用程序崩溃

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

我刚刚设置了一个onClick方法,它是在activity类中编写的,每当单击按钮时就会调用它。甚至在进入方法之前,应用程序就崩溃了

单击浮动操作按钮时收到的错误消息

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>