首页 > 解决方案 > 当我尝试在选项卡之间切换时应用程序崩溃

问题描述

我正在尝试添加一个按钮,该按钮可以在我的 android 应用程序中提示语音输入,并将语音返回为文本表单以通过 TextView 显示。但是,一旦我将以下代码添加到我的片段中,一旦我尝试将视图切换到包含片段和语音按钮的特定选项卡,我的应用程序就会崩溃。

语音按钮的代码(请注意,我的麦克风按钮在我的片段的 onCreateView 中,而不是单独的 onClickListener 方法),并且我的应用程序仅在添加以下代码时崩溃...:-

microphonebutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());

                if (intent.resolveActivity(getActivity().getPackageManager()) != null)  {
                    startActivityForResult(intent, 10);
                } else {
                    Toast.makeText(getActivity().getApplicationContext(), "Your device does not support speech input !",Toast.LENGTH_SHORT).show();
                }

            }
        });

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (resultCode) {
            case 10:
                if (resultCode == Activity.RESULT_OK && data != null) {
                    ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                    textView.setText(result.get(0));

                }
                break;
        }

    }

应用程序崩溃时显示的 Logcat:-

10-01 23:39:37.875 27828-27828/project.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: project.myapplication, PID: 27828
    java.lang.ClassCastException: android.support.v7.widget.AppCompatImageButton cannot be cast to android.widget.Button
        at project.myapplication.Translator.onCreateView(Translator.java:101)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
        at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
        at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
        at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
        at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
        at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1984)
        at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:626)
        at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:1268)
        at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:668)
        at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:630)
        at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:611)
        at android.support.design.widget.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected(TabLayout.java:2191)
        at android.support.design.widget.TabLayout.dispatchTabSelected(TabLayout.java:1164)
        at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1157)
        at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1127)
        at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1426)
        at android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:1536)
        at android.view.View$PerformClick.run(View.java:24770)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

标签: androidandroid-fragmentscrashspeech-recognitiononclicklistener

解决方案


错误表示您正在将AppCompatImageButton 转换为 Button。 检查您将按钮与 xml 绑定的代码。

Button button = findViewById(your_button_id);

确保它正确铸造。查看此链接以获取更多信息 - ClassCastException


推荐阅读