#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
).