0

我在 viewpager、Fragment1Fragment2Fragment3中有你的片段。

fragment1有一个按钮,当点击它时 setEnable(true) fragment2 中的按钮和 fragment2 中的按钮 setEnable(true) fragment3 中的 button3

一切似乎都工作正常,但是当我从片段 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 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 中使用 eventbus 3.0。

一切正常,但是当我滑过视图寻呼机时,如果我从 3 滑到 2,信息仍然存在于 frag3 中。但是当我从 3 滑到 2 并回到 3 时达到 1 时,信息就丢失了。也就是说,frag 3中的按钮恢复到原来的状态(启用false)为什么??如何在 viewpager 中保留所有导航中的更改?

4

1 回答 1

1

您可以尝试使用:

setOffscreenPageLimit(int limit) // In your case, limit = 2

在 ViewPager 对象上,该对象设置应保留到处于空闲状态的视图层次结构中当前页面的任一侧的页面数。

于 2017-08-04T17:53:43.050 回答