Приложение полностью зависает, когда включены кнопки навигации - PullRequest
0 голосов
/ 09 декабря 2018

В моем приложении BottomAppBar, который позволяет пользователю перемещаться между различными фрагментами.Несколько дней назад я заметил, что мое приложение полностью зависает без сообщения об ошибке, когда должен отображаться определенный фрагмент, даже если я не изменил ни одной строки в его классе.Сегодня я отключил кнопки навигации в файле config.ini эмулятора, чтобы сделать несколько скриншотов.Затем я случайно нажал на навигационную запись для нерабочего фрагмента, и он снова неожиданно заработал.Но как только я снова включил эти кнопки, он снова перестал работать.Он также не работает на других эмуляторах.

Я изменил следующие строки с да на нет в файле конфигурации эмулятора, чтобы отключить кнопки:

hw.mainKeys=no
hw.keyboard=no

Класснерабочего фрагмента:

private TabLayout mTabLayout;
private ViewPager mViewPager;

private BankAccountsStatisticsFragment bankAccountsStatisticsFragment;
private BillsStatisticsFragment billsStatisticsFragment;
private CategoriesStatisticsFragment categoriesStatisticsFragment;
private GoalsStatisticsFragment goalsStatisticsFragment;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View inflatedView = inflater.inflate(R.layout.fragment_statistics, container, false);

    setupFragments();

    mTabLayout = (TabLayout) inflatedView.findViewById(R.id.tl_statistics);
    mViewPager = (ViewPager) inflatedView.findViewById(R.id.vp_statistics);

    mViewPager.setAdapter(new Adapter(getChildFragmentManager()));
    mTabLayout.setupWithViewPager(mViewPager);

    return inflatedView;
}

private class Adapter extends FragmentPagerAdapter {

    private static final int TABS = 4;

    public Adapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:return bankAccountsStatisticsFragment;
            case 1: return billsStatisticsFragment;
            case 2: return categoriesStatisticsFragment;
            case 3: return goalsStatisticsFragment;
            default: throw new IllegalStateException("Couldn't find a fragment for position " + position);
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position){
            case 0: return getString(R.string.tab_bank_accounts);
            case 1: return getString(R.string.tab_bills);
            case 2: return getString(R.string.tab_categories);
            default: return getString(R.string.tab_goals);
        }
    }

    @Override
    public int getCount() {
        return TABS;
    }
}

private void setupFragments(){
    bankAccountsStatisticsFragment = new BankAccountsStatisticsFragment();
    billsStatisticsFragment = new BillsStatisticsFragment();
    categoriesStatisticsFragment = new CategoriesStatisticsFragment();
    goalsStatisticsFragment = new GoalsStatisticsFragment();
}

Кажется, что фрагменты для ViewPager не работают, потому что при возврате различных фрагментов из другой части приложения он работает нормально.

LOGCAT при зависании

12-09 09: 42: 18.786 1564-3126 /?W / audio_hw_generic: недостаточно данных для HAL, ожидаемая позиция 1027726, только запись 1027440 12-09 09: 42: 21.540 1814-1828 / system_process E / memtrack: не удалось загрузить модуль memtrack 12-09 09: 42: 21.540 1814-1828 / system_process W / android.os.Debug: не удалось получить информацию об использовании памяти: -1 12-09 09: 42: 21.998 1564-1643 /?W / audio_hw_generic: недостаточно данных для HAL, ожидаемая позиция 1333681, только запись 1181520 12-09 09: 42: 36.339 2514-5023 / com.google.android.gms I / ufd: 18-ClearListeners - metadata {принудительно:true, service_id: 0} 12-09 09: 42: 40.693 1814-1828 / system_process E / memtrack: не удалось загрузить модуль memtrack

...