MyTetra Share
Делитесь знаниями!
CrimePagerActivity.java
21.04.2017
11:44
Раздел: Android - books - AndroidProgramming2e - 11 ViewPager
CrimePagerActivity.java
package com.bignerdranch.android.criminalintent; 
 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.support.v4.view.ViewPager; 
 
import java.util.List; 
import java.util.UUID; 
 
 
//Класс CrimePagerActivity будет субклассом FragmentActivity. Он создает экземпляр и управляет ViewPager. 
public class CrimePagerActivity extends FragmentActivity { 
 
//    ViewPager и PagerAdapter 
//    Класс ViewPager в чем-то похож на RecyclerView. Чтобы класс RecyclerView мог выдавать представления, ему необходим экземпляр Adapter. Классу ViewPager необходим адаптер PagerAdapter. Однако взаимодействие между ViewPager и PagerAdapter намного сложнее взаимодействия между RecyclerView и Adapter. К счастью, мы можем использовать FragmentStatePagerAdapter — субкласс PagerAdapter, который берет на себя многие технические подробности. FragmentStatePagerAdapter сводит взаимодействие к двум простым методам: getCount() и getItem(int). При вызове метода getItem(int) для позиции в массиве преступлений следует вернуть объект CrimeFragment, настроенный для вывода информации объекта в заданной позиции. 
 
    private static final String EXTRA_CRIME_ID = 
            "com.bignerdranch.android.criminalintent.crime_id"; 
 
    private ViewPager mViewPager; 
    private List<Crime> mCrimes; 
 
    public static Intent newIntent(Context packageContext, UUID crimeId) { 
        Intent intent = new Intent(packageContext, CrimePagerActivity.class); 
        intent.putExtra(EXTRA_CRIME_ID, crimeId); 
        return intent; 
    } 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_crime_pager); 
 
        UUID crimeId = (UUID) getIntent() 
                .getSerializableExtra(EXTRA_CRIME_ID); 
 
        mViewPager = (ViewPager) findViewById(R.id.activity_crime_pager_view_pager); 
 
        mCrimes = CrimeLab.get(this).getCrimes(); 
        FragmentManager fragmentManager = getSupportFragmentManager(); 
        mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) { 
 
//            Два метода PagerAdapter весьма просты. Метод getCount() возвращает текущее количество элементов в списке. Все существенное происходит в методе getItem(int). Он получает экземпляр Crime для заданной позиции в наборе данных, после чего использует его идентификатор для создания и возвращения правильно настроенного экземпляра CrimeFragment. 
            @Override 
            public Fragment getItem(int position) { 
                Crime crime = mCrimes.get(position); 
                return CrimeFragment.newInstance(crime.getId()); 
            } 
 
            @Override 
            public int getCount() { 
                return mCrimes.size(); 
            } 
        }); 
 
//        В конце CrimePagerActivity.onCreate(…) найдите индекс отображаемого преступления; для этого переберите и проверьте идентификаторы всех преступлений. Когда вы найдете экземпляр Crime, у которого поле mId совпадает с crimeId в дополнении интента, измените текущий элемент по индексу найденного объекта Crime. 
 
        for (int i = 0; i < mCrimes.size(); i++) { 
            if (mCrimes.get(i).getId().equals(crimeId)) { 
                mViewPager.setCurrentItem(i); 
                break; 
            } 
        } 
    } 
} 

 
MyTetra Share v.0.52
Яндекс индекс цитирования