如何在 Activity(非 AppCompatActivity)中打开片段?
Posted
技术标签:
【中文标题】如何在 Activity(非 AppCompatActivity)中打开片段?【英文标题】:How to open a fragment in a Activity(non-AppCompatAcitivity)? 【发布时间】:2020-11-15 21:25:35 【问题描述】:正如标题所述,我想打开一个位于 Activity(Non AppCompatActivity) 中的 Fragment
代码:
TableFragment fragment = new TableFragment();
fragment.setArguments(bundle);
View view = (View) findViewById(R.id.Example);
AppCompatActivity activity = (AppCompatActivity) view.getContext().getApplicationContext();
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
ft.replace(R.id.idFragment, fragment);
ft.commit();
错误:原因:
java.lang.ClassCastException: android.app.Application cannot be cast to androidx.appcompat.app.AppCompatActivity
也试过了:
Activity activity = (Activity) this;
FragmentManager fragmentManager = activity.getFragmentManager();
FragmentTransaction ft= fragmentManager.beginTransaction();
TableFragment fragment = new TableFragment();
ft.replace(R.id.idFragment, fragment);
ft.commit();
错误:
Required type: androidx.fragment.app.FragmentTransaction
Provided: android.app.FragmentTransaction
问题:如何在 Activity 中打开 Fragment(非 AppCompatActivity)?
【问题讨论】:
TableFragment
正在扩展Fragment
的AndroidX 版本。托管它的活动需要从 AndroidX FragmentActivity
扩展。 AppCompatActivity
执行此操作,但您可以自己扩展 FragmentActivity
。如果您不想这样做,那么您的活动将无法显示TableFragment
。
你的意思是你的activity扩展了Activity吗?
@CommonsWare,谢谢你成功了。转发你的答案
【参考方案1】:
TableFragment
正在扩展Fragment
的AndroidX 版本。托管它的 Activity 需要从 AndroidX FragmentActivity
扩展。
AppCompatActivity
执行此操作,但出于某种原因您不想使用它。这很好,因为您可以自己扩展 FragmentActivity
。
如果您不想这样做,那么您的活动将无法显示TableFragment
。您需要让 TableFragment
扩展已弃用的 Fragment
的框架版本。
【讨论】:
以上是关于如何在 Activity(非 AppCompatActivity)中打开片段?的主要内容,如果未能解决你的问题,请参考以下文章
将 View 从 setContentView 传递给非 Activity 类
Kotlin 特殊的registerActivityLifecycleCallbacks+一个非Activity转跳到另一个Activity
在扩展 AsyncTask 的类中使用 DoInBackground 方法更改非 MainActivity 的 Activity 中 TextView 的文本