在父 Activity 中实现内部 Fragment 类

Posted

技术标签:

【中文标题】在父 Activity 中实现内部 Fragment 类【英文标题】:Implements inner Fragment class in parent Activity 【发布时间】: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 【参考方案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)。

【讨论】:

以上是关于在父 Activity 中实现内部 Fragment 类的主要内容,如果未能解决你的问题,请参考以下文章

安卓开发之Activity传输数据到Fragmen+实例分析

如何在角度材料中实现 Sidenav、页眉和页脚?

在TextView文本中实现activity跳转

Android 自定义Dialog类,并在Activity中实现按钮监听。

Android中实现activity的页面跳转并传值

gitee查询用户名和密码 Android Studio 3.5以上版本新特性 sharePreferences 使用 不同的Activity间的preferences共享问题 Fragmen