viewPager 片段问题中的 EventBus
EventBus in viewPager fragment issue
我在 viewpager 中有这些片段,Fragment1、Fragment2 和 Fragment3。
fragment1 有一个按钮,当点击它时 setEnable(true) 片段 2 中的按钮和片段 2 中的按钮 setEnable(true) 片段 3 中的按钮 3
一切似乎都工作正常,但是当我从片段 3 传递到片段 1 时浏览片段时,片段 3 丢失了信息并且按钮回到了它的初始状态 -setEnable(false) 就像开始时一样,但是 fragment1 和 fragment2 仍然工作正常,当我在 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 EventoBotton());
System.out.println("saliendoooo");
}
});
return rootView;
}
}
片段2
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(EventoBotton ev) {
btnNext.setEnabled(true);//HERE RECEIVE EVENT FORM FRAG 1
}
}
片段 3
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 the event from frag 2
txtDos.setText("hola mundo");
btnDis.setEnabled(true);
}
}
这些是我的 POJO 事件
public class EventoBotton {
public EventoBotton() {}
}
其他活动
public class EventoDos {
public EventoDos() {}
}
我在 SDK 21 中使用事件总线 3.0。
一切正常,但是当我滑动 通过视图寻呼机时,如果我从 3 滑动到 2,信息仍然存在于 frag3 中。但是当我从 3 滑到 2 并回到 3 时达到 1 时,信息丢失了。也就是说,frag 3 中的按钮回到了原来的状态(enabled false) 为什么??我怎样才能在 viewpager 中保留所有导航中的更改?
您可以尝试使用:
setOffscreenPageLimit(int limit) // In your case, limit = 2
在 ViewPager 对象上,它设置在空闲状态下应保留在视图层次结构中当前页面任一侧的页面数。
我在 viewpager 中有这些片段,Fragment1、Fragment2 和 Fragment3。
fragment1 有一个按钮,当点击它时 setEnable(true) 片段 2 中的按钮和片段 2 中的按钮 setEnable(true) 片段 3 中的按钮 3
一切似乎都工作正常,但是当我从片段 3 传递到片段 1 时浏览片段时,片段 3 丢失了信息并且按钮回到了它的初始状态 -setEnable(false) 就像开始时一样,但是 fragment1 和 fragment2 仍然工作正常,当我在 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 EventoBotton());
System.out.println("saliendoooo");
}
});
return rootView;
}
}
片段2
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(EventoBotton ev) {
btnNext.setEnabled(true);//HERE RECEIVE EVENT FORM FRAG 1
}
}
片段 3
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 the event from frag 2
txtDos.setText("hola mundo");
btnDis.setEnabled(true);
}
}
这些是我的 POJO 事件
public class EventoBotton {
public EventoBotton() {}
}
其他活动
public class EventoDos {
public EventoDos() {}
}
我在 SDK 21 中使用事件总线 3.0。
一切正常,但是当我滑动 通过视图寻呼机时,如果我从 3 滑动到 2,信息仍然存在于 frag3 中。但是当我从 3 滑到 2 并回到 3 时达到 1 时,信息丢失了。也就是说,frag 3 中的按钮回到了原来的状态(enabled false) 为什么??我怎样才能在 viewpager 中保留所有导航中的更改?
您可以尝试使用:
setOffscreenPageLimit(int limit) // In your case, limit = 2
在 ViewPager 对象上,它设置在空闲状态下应保留在视图层次结构中当前页面任一侧的页面数。