У меня есть действие, в котором есть макет вкладки, в котором у меня есть два разных фрагмента. Я использую 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 вызываются независимо от того, из какого фрагмента был инициирован запрос.
Я думаю, мы можем добиться этого, убив невидимый фрагмент. мы можем это сделать?
Измените следующие строки:
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);
Таким образом у вас будет только один экземпляр вашего слушателя, так как предыдущий завершается, который был создан в предыдущем фрагменте. Поэтому всякий раз, когда фрагмент перезапускается, он закроет предыдущий экземпляр и создаст новый экземпляр.
это помогло, сэр, большое вам спасибо.