Как избежать одновременного вызова двух одинаковых событий в двух разных фрагментах - PullRequest
0 голосов
/ 01 мая 2018

У меня есть действие, в котором есть макет вкладки, в котором у меня есть два разных фрагмента. Я использую viewpager для перемещения по этим фрагментам.

 public void setupViewPager(ViewPager viewPager) {
        MainActivity.ViewPagerAdapter adapter = new MainActivity.ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new Dashboard(), "Dashboard");
        adapter.addFragment(new Buysell(), "Buy/Sell");
        viewPager.setAdapter(adapter);
    }

    public class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }

В обоих фрагментах я использую некоторые события socket.io, которые совпадают.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    AppController app = (AppController) 
    getActivity().getApplication();
    mSocket = app.getSocket();

    mSocket.on("inr_balance_data", inrBalanceData);
    mSocket.on("order_notify", server_Response_Buy);

}

В обоих фрагментах событие "order_notify" одинаково. Таким образом, проблема, с которой я сталкиваюсь, заключается в том, что когда я излучаю какое-то событие из одного фрагмента, а order_notify должен прослушивать это событие, тогда order_notify вызывается в обоих фрагментах.

Я хочу, если я генерирую какое-либо событие из фрагмента панели мониторинга, тогда вызывается только order_notify, который присутствует во фрагменте панели мониторинга.

и когда я генерирую какое-либо событие из фрагмента buysell, тогда вызывается только order_notify, который присутствует во фрагменте buysell.

в настоящее время оба order_notify вызываются независимо от того, из какого фрагмента был инициирован запрос.

Я думаю, что мы можем достичь этого, убив фрагмент, который не виден. мы можем сделать это?

1 Ответ

0 голосов
/ 02 мая 2018

Изменить следующие строки:

mSocket.on("inr_balance_data", inrBalanceData);
mSocket.on("order_notify", server_Response_Buy);

до:

mSocket.off("inr_balance_data");
mSocket.off("order_notify");
mSocket.on("inr_balance_data", inrBalanceData);
mSocket.on("order_notify", server_Response_Buy);

Выполнив это, вы получите только один экземпляр вашего слушателя, так как предыдущий завершается, который был создан в предыдущем фрагменте. Поэтому, когда фрагмент перезапускается, он закрывает предыдущий экземпляр и создает новый экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...