如何使用ClassCastException接口更新ViewPager中的当前片段?

时间:2018-01-08 00:14:35

标签: android android-fragments interface android-viewpager classcastexception

我正在尝试刷新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。以下是我的代码:

CurrentFragment(在ViewPager中)

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();
}

ViewPagerAdapter

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);
}

任何反馈都将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:0)

在onAttach(Context context)中,上下文是Activity的意思,所以对你的接口强制转换上下文会抛出强制转换异常,如果你想与每个片段进行通信,我想你可以试试Event Bus库。

答案 1 :(得分:0)

尝试使用onAttachFragment()代替onAttach()

@Override
public void onAttachFragment(Fragment childFragment) {
    confirmListener = (ConfirmListener) childFragment;
}