Подтвердить что ты не робот

FragmentPagerAdapter Проведите по экрану, чтобы показать ширину экрана ListView 1/3

EDIT: См. мой ответ ниже →

Я хочу иметь представление, что при прокрутке вправо отображается listView. Очень похоже на то, что реализовано в новом магазине Google Play (пример ниже). Я думаю, что это ViewPager, но я пробовал дублировать его без преувеличения. Я думал, что может быть просто, что атрибут width 'ListView Page' был установлен на определенный dp, но это не работает. Я также пробовал модифицировать pakerfeldt viewFlow и не могу понять, как Google это делает

Я на правильном пути? Если у кого-то есть идея, как дублировать это, я был бы очень признателен. Я думаю, что это может стать популярным новым способом показать навигационное представление на планшетах....? Код лучше всего поможет. Спасибо!

enter image description here

Проведите по экрану вправо:

enter image description here

финишированный салфетки; макет показывает список и ЧАСТЬ ВТОРОЙ ФРАГМЕНТИРОВКИ (ТОЧНО КАК ВЫСТАВКА) Фрагмент списка не заполняет экран:

enter image description here

Когда пользователь переместится влево, главная страница отображается только, и если пользователь снова проводит поиск, viewPager переходит к следующей странице.

4b9b3361

Ответ 1

Извините за последнее обновление. Я внедрил это из walkice на Gethub с очень небольшим изменением. Просто используйте условный оператор для GestureDetector, чтобы прокрутить его в поле зрения только тогда, когда отображается идентификатор ViewPager '0'. Я также добавил переключатель в моем ActionBar

Ответ 2

Следующий код достигает желаемого эффекта:

В PageAdapter:

@Override
public float getPageWidth(int position) {
if (position == 0) {
    return(0.5f);
} else {
    return (1.0f);       
}

Ответ 3

Чтение вашего вопроса в последний раз... убедитесь, что вы также настроили определенные макеты для каждого устройства размера. На ваших скриншотах похоже, что вы пытаетесь запустить это на планшете. Вы получаете одинаковые результаты на телефоне?

Настройка макета

Удостоверьтесь, что ваш макет подобен этому и имеет ViewPager:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:background="@color/body_background">

<include layout="@layout/pagerbar" />
<include layout="@layout/colorstrip" />

<android.support.v4.view.ViewPager
        android:id="@+id/example_pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1" />

</LinearLayout>

Настройка активности

Установите свой PagerAdapter в свой "FragmentActivity" и убедитесь, что вы реализуете "OnPageChangeListener". Затем правильно настройте свой PagerAdapter в своем onCreate.

public class Activity extends FragmentActivity 
             implements ViewPager.OnPageChangeListener { 
   ...

    public void onCreate(Bundle savedInstanceState) {

       PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager());
       pager = (ViewPager) findViewById(R.id.example_pager);

       pager.setAdapter(adapter);
       pager.setOnPageChangeListener(this);
       pager.setCurrentItem(MyFragment.PAGE_LEFT);

       ...
   }


   /* setup your PagerAdapter which extends FragmentPagerAdapter */

   static class PagerAdapter extends FragmentPagerAdapter {
       public static final int NUM_PAGES = 2;

       private MyFragment[] mFragments = new MyFragment[NUM_PAGES];

          public PagerAdapter(FragmentManager fragmentManager) {
           super(fragmentManager);
       }

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

       @Override
       public Fragment getItem(int position) {
           if (mFragments[position] == null) {
               /* this calls the newInstance from when you setup the ListFragment */
               mFragments[position] = MyFragment.newInstance(position);
           }

           return mFragments[position];
       }
   }

 ...

Настройка фрагмента

При настройке фактического списка ListFragment (listViews) вы можете создать несколько экземпляров с такими аргументами, как:

  public static final int PAGE_LEFT = 0;
  public static final int PAGE_RIGHT = 1;

  static MyFragment newInstance(int num) {
       MyFragment fragment = new MyFragment();

       Bundle args = new Bundle();
       args.putInt("num", num);

       fragment.setArguments(args);
       return fragment;
   }

Когда вы перезагружаете listViews (как вы решите это реализовать), вы можете выяснить, какой экземпляр фрагмента вы используете, используя такие аргументы:

    mNum = getArguments() != null ? getArguments().getInt("num") : 1;

Если вы пройдете через свой код, вы заметите, что он будет проходить через каждый экземпляр, поэтому вышеуказанный код нужен только в onCreate, а метод перезагрузки может выглядеть следующим образом:

private void reloadFromArguments() {
    /* mNum is a variable which was created for each instance in the onCreate */
    switch (mNum) {
        case PAGE_LEFT:
            /* maybe a query here would fit your needs? */
            break;

        case PAGE_RIGHT:
            /* maybe a query here would fit your needs? */
            break;
    }
}

Несколько источников, которые могут помочь вам с примерами, которые вы могли бы построить, а не начинать с нуля:

Больше объяснений и примеров с детской площадки. http://blog.peterkuterna.net/2011/09/viewpager-meets-swipey-tabs.html который является ссылкой на:  http://code.google.com/p/android-playground/

Дополнительная информация и хорошая связь. http://www.pushing-pixels.org/2012/03/16/responsive-mobile-design-on-android-from-view-pager-to-action-bar-tabs.html

Если у вас есть более конкретные вопросы, и я всегда могу отредактировать (обновить) свой ответ, чтобы ответить на ваши вопросы. Удачи!:)

Ответ 4

ViewPager является частью Compatible Package

Если вы используете Fragments, вы можете использовать ViewPager для прокрутки между ними.

Здесь приведен пример объединения Fragments и ViewPager

В вашем конкретном случае вы хотели бы создать ListFragment, а затем реализовать ViewPager.

Ответ 5

Я думаю, вы ищете реализацию "боковой навигации" рядом со стандартным ViewPager.

Я читал 2 разных статьи по этому шаблону:

Первый из самого шаблона:

Android Ui Pattern Новый шаблон пользовательского интерфейса - боковая навигация

Второй по более подробному пути, кто его построил:

Меню приложения Cyril Mottier Fly-in # 1 # 2 # 3

Эта вторая статья упоминается в блоге Android Ui Pattern.

Ответ 6

С небольшим Trick поведение может быть достигнуто с помощью ScrollView-Behavior внутри ViewPager. Если вы хотите ограничить область самого левого фрагмента, вы можете ограничить пределы прокрутки ScrollView.

В вашем случае: в onPageChangeListener ViewPager сделать что-то вроде этого:

@Override
public void onPageScrollStateChanged(int arg0) {
    restrictLeftScroll();
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
    restrictLeftScroll();
}

@Override
public void onPageSelected(int arg0) {

}

private void restrictLeftScroll() {

    if (display != null) {

        /* get display size */
        Point size = new Point();
        display.getSize(size);

        /* get desired Width of left fragment */
        int fragmentWidth = getResources().getDimensionPixelSize(R.dimen.category_fragment_width);

        if (mViewPager.getScrollX() < size.x - fragmentWidth) {
            mViewPager.scrollTo(size.x - fragmentWidth, mViewPager.getScrollY());
        }
    }
}

Эта часть кода работала для меня без проблем.;)