我正在尝试刷新ViewPager中当前选定的片段。我使用一个MainActivity作为通过接口调用在多个片段之间进行通信的方法。我正在使用的片段正在实现对ViewPagerAdapter的接口调用,但是,当将监听器附加到片段时,我收到 ClassCastException 错误" Activity无法转换为Fragment"。这是下面的代码:
@Override
public void onAttach(Context context) {
super.onAttach(context);
mListener = (UpdateableFragment) context; **//ERROR HERE**
}
我正在尝试按照此处https://stackoverflow.com/a/17855730发布的答案,但我无法弄清楚应该在哪里处理接口调用。目前我在ViewPagerAdapter中实现了它,所以当我需要更新时,我只能通知notifyDataSetChange(),但它返回ClassCastException错误。
我试图在MainActivity中处理接口调用,我正在使用它与其余的片段进行通信,这消除了ClassCastException错误,但是,我无法调用ViewPagerAdapter和notifyDatasetChange。以下是我的代码:
private UpdateableFragment mListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
mListener = (UpdateableFragment) context; **//ERROR HERE**
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public void click(){
mListener.update();
}
public interface UpdateableFragment {
void update();
}
public class ViewPagerAdapter extends FragmentPagerAdapter implements CurrentFragment.UpdateableFragment{
public ViewPagerAdapter(FragmentManager fm) {
super(fm);}
//Note: unnecessary code left out.
public void update() {
notifyDataSetChanged();
}
@Override
public int getItemPosition(Object object) {
if (object instanceof CurrentFragment.UpdateableFragment) {
((CurrentFragment.UpdateableFragment) object).update();
}
return super.getItemPosition(object);
}
任何反馈都将不胜感激。谢谢。
答案 0 :(得分:0)
在onAttach(Context context)中,上下文是Activity的意思,所以对你的接口强制转换上下文会抛出强制转换异常,如果你想与每个片段进行通信,我想你可以试试Event Bus库。
答案 1 :(得分:0)
尝试使用onAttachFragment()
代替onAttach()
:
@Override
public void onAttachFragment(Fragment childFragment) {
confirmListener = (ConfirmListener) childFragment;
}