当我尝试从适配器启动片段时,出现此异常。
我寻找了类似的问题,但是转换为androidX相对较新,因此我找不到相关的解决方案。 我找到了在创建Adapter对象时将FragmentManager传递给构造函数的解决方案。这还需要初始化FragmentMAnager,这就是我再次陷入困境的地方。
该过程的代码为:
AppCompatActivity activity = (AppCompatActivity) v.getContext();
int id = currentCountry.getId();
Fragment mdf = new DetailsFragment();
activity.getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragments_container, mdf)
.addToBackStack(null)
.commit();
异常消息是
java.lang.ClassCastException: android.app.Application cannot be cast to androidx.appcompat.app.AppCompatActivity.
有解决方案的想法吗?也许最后一个选择将是从androidX还原回android。
是否需要其他代码来解决此问题?
答案 0 :(得分:0)
我认为这很完美
将((YOUR_ACTIVITY_NAME)ADAPTER_CONTEXT)替换为活动,以便获得当前活动
int id = currentCountry.getId();
Fragment mdf = new DetailsFragment();
((YOUR_ACTIVITY_NAME) ADAPTER_CONTEXT).getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragments_container, mdf)
.addToBackStack(null)
.commit();
答案 1 :(得分:0)
View.getContext()
不必返回Context
中的Activity
。基本上它可以是用来扩充此视图的任何Context
。在您的情况下,Context
是用于在适配器中扩充视图的ApplicationContext
。为了快速修复,您可以更改Context
的{{1}}方法中使用的onCreateViewHolder
。我不确定您如何提高您的回收站视图,但可以考虑在RecyclerAdapter
中使用parent.getContext()
。
但是,最好在适配器中创建回调并将click事件委托给onCreateViewHolder
的所有者。