Попытка открыть новый экран / активность в Android - PullRequest
1 голос
/ 11 февраля 2020

Я пытаюсь перейти на новый экран, когда пользователь нажимает одну из опций. Этот код вложен в основное действие.

@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);
        }
    }

Затем я пытаюсь заставить его переключиться на один из созданных мной фрагментов. Когда я делаю это, я получаю сообщение об ошибке:

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

1 Ответ

0 голосов
/ 11 февраля 2020

Вы хотите делать Транзакции с фрагментами, а не 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);
     }
 }

И определить монетоприемник фрагмента /, который будет заменен вашими фрагментами: в представлении вашей деятельности:

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