java - 尝试在 Android 中打开新屏幕/Activity

标签 java android android-fragments

当用户单击其中一个选项时,我尝试切换到新屏幕。此代码嵌套在主 Activity 中。

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.about_settings:
                Log.d("tcc", "This is getting to the about fragment");
                startActivity(new Intent(MainActivity.this, HelpFragment.class));
                return true;
            case R.id.help_settings:
                Log.d("tcc", "This is getting to the help fragment");
                startActivity(new Intent(MainActivity.this, SettingsFragment.class));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

然后我试图让它切换到我创建的 fragment 之一。当我这样做时,我收到一个错误:

Unable to instantiate activity ComponentInfo{info.hccis.bookingapplication/info.hccis.bookingapplication.SettingsFragment}: java.lang.ClassCastException: info.hccis.bookingapplication.SettingsFragment cannot be cast to android.app.Activity

最佳答案

您想要进行 fragment 事务而不是startActivity:

@Override
 public boolean onOptionsItemSelected(MenuItem item) {
     FragmentManager fragmentManager = getSupportFragmentManager();
     switch (item.getItemId()) {

         case R.id.about_settings:
             Log.d("tcc", "This is getting to the about fragment");
             FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
             fragmentTransaction.replace(R.id.fragment_container, new HelpFragment());
             fragmentTransaction.addToBackStack(null); // to provided navigation when back is clicked
             fragmentTransaction.commit();
             return true;

         case R.id.help_settings:
             Log.d("tcc", "This is getting to the help fragment");

             FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
             fragmentTransaction.replace(R.id.fragment_container, new SettingsFragment());
             fragmentTransaction.addToBackStack(null); // to provided navigation when back is clicked
             fragmentTransaction.commit();
             return true;

         default:
             return super.onOptionsItemSelected(item);
     }
 }

And define a fragment coinainer/which will be replaced by your fragments: in your Activity's View:

 <FrameLayout
   android:id="@+id/fragment_container"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

关于java - 尝试在 Android 中打开新屏幕/Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60162603/

相关文章:

java - 通过名称作为字符串访问 Java 变量

java - 使用apache poi检测excel中的隐藏单元格

java - 将列表项动态添加到 baseadapter android

android - 来自 Canvas.setBitmap(Bitmap) 的 UnsupportedException

java - 无法在同一 Activity 中创建多个 YoutubePlayerFragment

java - 从通知启动 Activity 并在 BackPressed 上传递数据

java - 如何检查 ExecutorService 是否为 "healthy"并正常工作?

android - 偏好屏幕显示文本 block

java - 我正在使用线程,当我离开 fragment 时,应用程序关闭

android - 使用 fragment 时在 Android 抽屉导航图像和向上插入符号之间切换