2

У меня возникла проблема в одном из моих фрагментов, который содержит TabLayout. TabLayout и данные внутри каждой вкладки отлично работают, но я все равно получаю ошибку moveToState (эта ошибка не возникает при переключении между первым и последним, только с первого на средний и последний на средний). Мое приложение все еще отлично работает с ошибкой, но я бы скорее избавился от него, чтобы избежать возможных будущих осложнений.Android - Средняя вкладка Ошибка в TabLayout в фрагменте

LogCat

04-23 00:08:04.064 1598-1598/org.ramferno.scoutapplication.ramfernoscout W/FragmentManager: moveToState: Fragment state for TeamInfoTabOneFragment{1788a4f #9 id=0x7f0c00ca} not updated inline; expected state 3 found 2 
04-23 00:12:56.007 1598-1598/org.ramferno.scoutapplication.ramfernoscout W/FragmentManager: moveToState: Fragment state for TeamInfoTabThreeFragment{29125dC#7 id=0x7f0c00ca} not updated inline; expected state 3 found 2 

TeamInfoFragment.java (С tabLayout)

package org.ramferno.scoutapplication.ramfernoscout.fragments; 

import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import org.ramferno.scoutapplication.ramfernoscout.adapters.InfoPagerAdapter; 
import org.ramferno.scoutapplication.ramfernoscout.R; 

/** 
* A simple {@link Fragment} subclass. 
*/ 
public class TeamInfoFragment extends Fragment { 
    TabLayout tabLayout; 
    ViewPager viewPager; 
    InfoPagerAdapter infoPagerAdapter; 

    public TeamInfoFragment() { 
     // Required empty public constructor 
    } //End of TeamInfoFragment 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_team_info, container, false); 

     //Initializes variables 
     tabLayout = (TabLayout) view.findViewById(R.id.infoTabLayout); 
     viewPager = (ViewPager) view.findViewById(R.id.infoPager); 

     //Adds tabs to viewPager 
     infoPagerAdapter = new InfoPagerAdapter(getFragmentManager()); 
     infoPagerAdapter.addFragments(new TeamInfoTabOneFragment(), "Team Info"); 
     infoPagerAdapter.addFragments(new TeamInfoTabTwoFragment(), "Achievements"); 
     infoPagerAdapter.addFragments(new TeamInfoTabThreeFragment(), "Past Tournaments"); 

     //Sets adapter for viewPager then sets the same view pager for tabLayout 
     viewPager.setAdapter(infoPagerAdapter); 
     tabLayout.setupWithViewPager(viewPager); 

     return view; 
    } //End of onCreateView 
} //End of class 

InfoPagerAdapter.java

package org.ramferno.scoutapplication.ramfernoscout.adapters; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 

import java.util.ArrayList; 

public class InfoPagerAdapter extends FragmentStatePagerAdapter { 
    ArrayList<Fragment> fragments = new ArrayList<>(); 
    ArrayList<String> tabTitles = new ArrayList<>(); 

    public void addFragments(Fragment fragments, String titles) { 
     this.fragments.add(fragments); 
     this.tabTitles.add(titles); 
    } //End of addFragments 

    public InfoPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } //End of InfoPagerAdapter 

    @Override 
    public Fragment getItem(int position) { 
     return fragments.get(position); 
    } //End of getItem 

    @Override 
    public int getCount() { 
     return fragments.size(); 
    } //Edn of getCount 

    public CharSequence getPageTitle(int position) { 
     return tabTitles.get(position); 
    } //End of getPageTitle 
} //End of class 

Пожалуйста, сообщите мне, если требуется больше информации.

+0

все еще ищет решение моей проблемы –

+0

я также имею такую ​​же проблему, Вы найдете любое решение, пожалуйста, поделитесь –

ответ

1

Это информационное сообщение журнала ... Существует an issue about it.

Участник проекта # 14 объявлений ... @ android.com Нет, это не имеет значения, и дополнительный журнал будет в будущем выпуске.

Для любознательного, FragmentManager.moveToState теперь обновляет состояние нового фрагмента по мере его окончания, а не в конце после завершения всех фаз изменения состояния. Это устранило несколько интересных ошибок, связанных с использованием диспетчера дочерних фрагментов и executePendingTransactions из одного из обратных вызовов жизненного цикла родительского фрагмента.

Один из переходов состояния, когда мы приводим фрагмент вверх, является не-оператором, который не обновлял состояние встроенной строки, и журнал, который вы видите, объявляет, что мы сделали это в конце, точно так же, как и до 23.2.

Извините за дополнительный лог шума :)

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/12283686) – pczeus

+0

Извините :), отредактирован – Pedr

Смежные вопросы