android - 当我尝试在选项卡之间切换时应用程序崩溃
问题描述
我正在尝试添加一个按钮,该按钮可以在我的 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)
解决方案
错误表示您正在将AppCompatImageButton 转换为 Button。 检查您将按钮与 xml 绑定的代码。
Button button = findViewById(your_button_id);
确保它正确铸造。查看此链接以获取更多信息 - ClassCastException
推荐阅读
- c# - 为什么 swagger.json 在 IIS 上的网站下作为应用程序托管时找不到错误?
- android - 为什么我的 getChildView() 被调用了 2 次?
- c - AVR GCC - 使用静态库 - 未定义的参考错误
- javascript - 如何解决“画布已被跨域数据污染”。当我尝试使用 getImageData
- openvpn - 选项错误:client4.ovpn:88: ca (2.4.7) 中无法识别的选项或缺少或额外的参数
- python - “maxRunningTime”选项的格式(Google AI Platform)
- json - 如何从自适应卡中取回消息
- c++ - 无法用指针写入交换
- java - 在 Grails (Twitter) 中使用和 OAuth2 保护的 API
- sapui5 - UI5:检索并显示 sap.m.Table 中的数千个项目