viewPager片段问题中的EventBus?

时间:2017-08-04 17:48:47

标签: android android-fragments android-viewpager greenrobot-eventbus greenrobot-eventbus-3.0

我在viewpager Fragment1,Fragment2,Fragment3

中有3个片段

fragment1有一个按钮,当onclick它setEnable(true)时,fragment2中的按钮和片段2中的按钮setEnable(true)中fragment3中的button3

似乎一切正常,但是当ai从片段3传递到片段1时导航片段时,片段3丢失信息并且按钮返回到其初始状态-setEnable(false),如在开始但是片段1和片段2中当我浏览viewpager中的所有片段时,仍然可以正常工作并且不会丢失信息。

如何在导航时将信息保存在fragment3中?这是我的代码

片段1

public class FragmentUno extends Fragment {
Button btnClick;
private EventBus bus=EventBus.getDefault();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_uno,container,false);
    btnClick= (Button)rootView.findViewById(R.id.button1);
    btnClick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                bus.post(new EventoBoton());
            System.out.println("saliendoooo");
        }
    });
    return rootView;
}

}

fragment2

public class FragmentDos extends Fragment {

private EventBus bus=EventBus.getDefault();
private EventBus bus2=EventBus.getDefault();
Button btnNext;

@Override
public void onResume() {
    super.onResume();
    bus.register(this);
}
 @Override
public void onPause() {
    super.onPause();
    bus.unregister(this);
}
@Override
public View onCreateView(LayoutInflater inflater,  ViewGroup container,Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_dos,container,false);
    btnNext=(Button)rootView.findViewById(R.id.btnF2);
    btnNext.setEnabled(false);
    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //HERE I POST EVENT TO SEND TO FRAG 3
            bus2.post(new EventoDos());
        }
    });
    return rootView;
}

@Subscribe
public void reenvio(EventoBoton ev){
    btnNext.setEnabled(true);//HERE RECEIVE EVENT FORM FRAG 1
}

}

Fragment3

public class FragmentTres extends Fragment {

TextView txtDos;
Button btnDis;
private EventBus bus2=EventBus.getDefault();

@Override
public void onResume() {
    super.onResume();
    bus2.register(this);
}

@Override
public void onPause() {
    super.onPause();
    bus2.unregister(this);
}

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_tres,container,false);
    txtDos=(TextView)rootView.findViewById(R.id.txtCambio);
    btnDis=(Button)rootView.findViewById(R.id.buttonF2);
    btnDis.setEnabled(false);

    return rootView;
}

@Subscribe
public void actualizar(EventoDos eventoDos){
    System.out.println("estamos aquiiii"); //HERE I RECEIVE EVENT FROM FRAG 2
    txtDos.setText("hola mundo");
    btnDis.setEnabled(true);
}

}

这是我的pojo活动

public class EventoBoton {

public EventoBoton(){}

}

另一个事件

public class EventoDos {

public EventoDos(){}

}

即时通讯使用eventbus 3.0我的sdk 21。

一切正常但当我滑过视图寻呼机时,如果我从3滑动到2,则信息仍然存在于frag3中,但是当我从3滑动到2并且当我回到3时达到1时,信息会丢失到说碎片3中的按钮恢复到原来的状态(启用为假)为什么?我怎样才能在viewpager的所有导航中坚持更改?提前谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试使用:

setOffscreenPageLimit(int limit) // in you case limit = 2
ViewPager对象上的

,它设置在空闲状态下视图层次结构中应保留到当前页面任一侧的页面数。