Как избежать одновременного вызова двух одинаковых событий в двух разных фрагментах

У меня есть действие, в котором есть макет вкладки, в котором у меня есть два разных фрагмента. Я использую 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 вызываются независимо от того, из какого фрагмента был инициирован запрос.

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

0
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

это помогло, сэр, большое вам спасибо.

Himanshu Agnihotri 03.05.2018 08:28

Другие вопросы по теме