【问题标题】:Implements inner Fragment class in parent Activity在父 Activity 中实现内部 Fragment 类
【发布时间】:2021-11-28 16:10:21
【问题描述】:

我有以下代码:

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) {
    ...
  }
}

但我在 SettingsActivity 类的声明中收到以下错误:cyclic inheritance involving SettingsActivity。我做错了什么?

【问题讨论】:

  • SendToActivity 定义在哪里?
  • @CommonsWare 哦正在编辑...
  • @CommonsWare 已编辑。
  • 尝试将其移动到 SettingsActivity 内,而不是在您的 inner class 内。这会将implements 更改为SettingsActivity.SendToActivity
  • 如果我只在implements 之后使用SettingsFragment.SendToActivitySettingsFragment 会变红并说:cannot find symbol

标签: android android-activity fragment


【解决方案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) {
    ...
  }
}

【讨论】:

  • 我遇到了同样的错误。
  • @Mike087:嗯...试试public static interface SendToActivity
  • 试过了。我遇到了同样的错误。
  • @Mike087:好的,那么,它可能需要是顶级的interface,而不是嵌套在看起来要实现该接口的类中。
【解决方案2】:

我自己回答:片段类需要在自己的 java 文件中。那就正常实现吧(implements SettingsFragment.SendToActivity)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    相关资源
    最近更新 更多