Реализует класс внутреннего фрагмента в родительской деятельности

#android #android-activity #fragment

Вопрос:

У меня есть следующий код:

 public class SettingsActivity extends AppCompatActivity implements SettingsActivity.SettingsFragment.SendToActivity {
  ...
  public static class SettingsFragment extends PreferenceFragmentCompat {
    
    SendToActivity callback;

    public void setSendToActivity (SendToActivity callback) {
      this.callback = callback;
    }

    public interface SendToActivity {
      public void send(int result);
    }
    ...
  }

  @Override
  public void onAttachFragment(Fragment fragment) {
    if (fragment instanceof SettingsFragment) {
      SettingsFragment settingsFragment = (SettingsFragment) fragment;
      settingsFragment.setSendToActivity(this);
    }
  }

  public void send(int result) {
    ...
  }
}
 

Но я получаю следующую ошибку: cyclic inheritance involving SettingsActivity в объявлении класса SettingsActivity. Что я делаю не так?

Комментарии:

1. Где это SendToActivity определено?

2. @CommonsWare О редактировании…

3. Отредактировано @CommonsWare.

4. Попробуйте переместить это так , чтобы оно было только внутри SettingsActivity , без того, чтобы оно было внутри вас inner class . Это изменило implements бы то, что должно быть SettingsActivity.SendToActivity .

5. Если я просто использую SettingsFragment.SendToActivity implements послесловие, SettingsFragment краснеет и говорит: cannot find symbol .

Ответ №1:

Попробуйте SendToActivity съехать SettingsFragment , например:

 public class SettingsActivity extends AppCompatActivity implements SettingsActivity.SendToActivity {
  public interface SendToActivity {
    public void send(int result);
  }

  ...

  public static class SettingsFragment extends PreferenceFragmentCompat {
    
    SendToActivity callback;

    public void setSendToActivity (SendToActivity callback) {
      this.callback = callback;
    }

    ...

  }

  @Override
  public void onAttachFragment(Fragment fragment) {
    if (fragment instanceof SettingsFragment) {
      SettingsFragment settingsFragment = (SettingsFragment) fragment;
      settingsFragment.setSendToActivity(this);
    }
  }

  public void send(int result) {
    ...
  }
}
 

Комментарии:

1. Я получил ту же ошибку.

2. @Mike087: Хммм… попробуй public static interface SendToActivity .

3. Пытался. Я получил ту же ошибку.

4. @Mike087: Хорошо, тогда, вероятно , он должен быть верхнего уровня interface , а не вложенным внутри класса, который стремится реализовать этот интерфейс.

Ответ №2:

Я отвечаю сам себе: класс фрагмента должен быть в своем собственном файле java. Затем просто реализуйте это нормально ( implements SettingsFragment.SendToActivity ).