2016-01-03 3 views
0

У меня есть перелистываемые фрагменты структурированы в следующей иерархии: enter image description hereперелистываемой фрагменты не отображающая в правильном порядке

, который я использую, чтобы представить пользователь приложение и его функцию. Однако, когда я запускаю приложение, фрагменты не отображаются в правильном порядке (welcome1 -> welcome2 -> welcome3 и т. Д.). Вместо этого он отображает «welcome2, welcome 2, welcome 3, welcome 4» при правильном прокрутке. Когда я прокручиваю влево, заказ снова перепутался, и он отображает «welcome4» каждый раз. Мой код выглядит следующим образом:

IntroActivity класс:

public class IntroActivity extends AppCompatActivity { 

private SectionsPagerAdapter mSectionsPagerAdapter; 
private ViewPager mViewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_feature); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

} 

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public Fragment getItem(int position) { 

     if (position == 0) { 

      Log.e("---","Position 0"); 
      return WelcomeFragment.newInstance("testtitle#1",R.layout.fragment_welcome_one,R.id.welcome1); 

     }else if (position == 1){ 

      Log.e("---","Position 1"); 
      return WelcomeFragment.newInstance("testtitle#2", R.layout.fragment_welcome_two, R.id.welcome2); 

     }else if (position == 2){ 

      Log.e("---","Position 2"); 
      return WelcomeFragment.newInstance("testtitle#3", R.layout.fragment_welcome_three, R.id.welcome3); 

     }else if (position == 3){ 

      Log.e("---","Position 3"); 
      return WelcomeFragment.newInstance("testtitle#4", R.layout.fragment_welcome_four, R.id.welcome4); 

     } 

     return null; 
    } 

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

    } 
} 

WelcomeFragment класс:

public class WelcomeFragment extends Fragment { 

static String mTitle; 
static int mLayoutID; 
static int mTitleID; 

public WelcomeFragment() { 
} 

public static WelcomeFragment newInstance(String title, int layoutID, int titleID) { 

    WelcomeFragment mWelcomeFragment = new WelcomeFragment(); 

    mTitle = title; 
    mLayoutID = layoutID; 
    mTitleID = titleID; 

    return mWelcomeFragment; 
} 

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

    View rootView = inflater.inflate(mLayoutID,container,false); 
    TextView textView = (TextView)rootView.findViewById(mTitleID); 
    Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Thin.ttf"); 
    textView.setText(mTitle); 
    textView.setTypeface(font); 

    return rootView; 
    } 
} 

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

ответ

0

Ваш метод newInstance неверен, а также ваши статические переменные-члены.

Сделать переменные приватным и не статична

private String mTitle; 
private int mLayoutID; 
private int mTitleID; 

и изменить ваш метод newInstance к

public static WelcomeFragment newInstance(String title, int layoutID, int titleID) { 
    WelcomeFragment mWelcomeFragment = new WelcomeFragment(); 

    mWelcomeFragment.mTitle = title; 
    mWelcomeFragment.mLayoutID = layoutID; 
    mWelcomeFragment.mTitleID = titleID; 

    return mWelcomeFragment; 
} 

Рассмотрим проверить my tutorial для объяснения углубленной работы с видом на пейджеры, а также рабочий пример на GitHub.

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