it-swarm.com.ru

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

РЕДАКТИРОВАТЬ: см. Мой ответ ниже ->

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

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

enter image description here

Проведите вправо:

enter image description here

Законченный удар; макет показывает список и ЧАСТЬ ВТОРОГО ФРАГМЕНТА (ТОЧНО КАК ПОКАЗАНО) Фрагмент списка не заполняет экран:

enter image description here

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

20
user742030

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

1
user742030

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

В PageAdapter:

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

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

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

Убедитесь, что ваш макет похож на это и имеет 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-площадка /

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

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

2
Codeversed

ViewPager является частью совместимого пакета

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

Вот пример объединения Fragments и ViewPager

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

0
adneal

С небольшой хитростью, поведение может быть достигнуто с помощью 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());
        }
    }
}

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

0
Neonfly

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

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

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

Шаблон пользовательского интерфейса Android с новым интерфейсом - боковая навигация

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

Кирил Мотье Fly-in меню приложения # 1# 2#

Ссылка на эту вторую статью есть в блоге Android Ui Pattern.

0
ol_v_er