The*_*ter 6 android android-arrayadapter android-fragments
我有ListView几行.每行都有一个button.
我想按钮启动FragmentTransaction来替换ListView所在的Fragment.
但是,在该getView()方法中Adapter,此行不起作用:
FragmentTransaction t = getContext().getSupportFragmentManager().beginTransaction();
它不喜欢上下文.
这可以通过这种方式完成,还是交易必须在其他地方进行?
Mel*_*pes 34
首先在构造函数中获取上下文,然后尝试下面的代码,
FragmentTransaction ft = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction();
Run Code Online (Sandbox Code Playgroud)
Tus*_*har 12
getSupportFragmentManager()仅为课程定义FragmentActivity,而不是为Context.因此,如果您尝试在类型的对象上调用它,则编译器无法解析该调用Context.
您可以使用反射以安全的方式执行此操作.只要您将FragmentActivity作为传递方式传递,这将始终有效Context.注意:FragmentActivity是Context的子类,因此您可以在可以传递Context的任何地方传递FragmentActivity.
所以请使用此代码:
if (getContext() instanceof FragmentActivity) {
// We can get the fragment manager
FragmentActivity activity = (FragmentActivity(getContext()));
FragmentTransaction t = activity.getSupportFragmentManager().beginTransaction();
}
Run Code Online (Sandbox Code Playgroud)
我建议你像这样将FragmentManager实例传递给Adapter构造函数:
public class YourAdapter extends...
private FragmentManage mFragmentManager;
public YourAdapter(FragmentManager fm) {
mFragmentManager = fm;
}
Run Code Online (Sandbox Code Playgroud)
并明确使用它:
FragmentTransaction ft = mFragmentManager.beginTransaction();
Run Code Online (Sandbox Code Playgroud)
这应该使您Adapter可以使用Fragment.getFragmentManager()或FragmentActivity.getSupportFragmentManager()实例进行初始化,因为它们指向同一个对象
| 归档时间: |
|
| 查看次数: |
13846 次 |
| 最近记录: |