2016-07-22 2 views
0

Предположим, у меня есть 5 фрагментов в viewpager. Скажем, фрагмент A, B, C, D, E.Как выполнить событие на следующем фрагменте viewpager?

У меня есть кнопка на фрагменте A, чтобы перейти к фрагменту B. Когда я нажимаю эту кнопку, viewpager прокручивает фрагмент B. Как-то я контролировал продолжительность фрагмента A B. Теперь дело в том, что у меня есть прокручиваемый контейнер во Фрагменте B. Я хочу прокрутить этот контейнер во время прокрутки между A и B. Теперь его прокрутка после того, как я перехожу от фрагмента А к Б. Я хочу, чтобы это произошло между этим переходом.

Внутри первого фрагмента:

@Override 
public void onClick(View view) { 
    if(view.getId() == bottomLayout.getId()) 
    { 

     MainActivity.pager.setCurrentItem(1); 

    } 
} 

Это изменит мою позицию пейджера от 0 до 1. Теперь, когда его изменение. Я контролировал скорость прокрутки viewpager. Помимо второго фрагмента, у меня есть ScrollView, мне нужно выполнить прокрутку по этому scrollview, поскольку фрагмент меняется, а не после его изменения.

+0

Вы можете использовать LocalBroadcastReceiver или другой EventBus, потому что у вас нет ссылок на фрагменты в ViewPager. – CherryPerry

+0

Я думаю, вам нужно сообщить нам, как вы делаете этот переход из фрагмента A в B. Используете ли вы какие-то жесты? Мысль о том, как вы можете отключить их значимым образом, чтобы пользователь не нашел его неожиданным? – Sufian

+0

Я делаю это при нажатии кнопки. фрагмента А. Я уже писал о том, что я использую клики. –

ответ

-1

Нет, это невозможно сделать, поскольку любое прокручиваемое представление, например listview или recyclerview, элементы создаются только тогда, когда они видны пользователю и только при прокрутке, поэтому, если этот фрагмент не отображается, вы не можете прокручивать ни один из его детское прокручиваемое представление.

+0

Есть ли способ сделать это без просмотра пейджера? –

+0

Нет, что вам нужно, не относится к viewpager. – Drv

+0

вот что я спрашиваю, есть ли способ сделать это без просмотра пейджера. –

0

Чтобы оживить представление FragmentB, вам нужно сообщить ему, чтобы начать анимацию, как только вы позвоните viewPager.setCurrentItem().

  1. Внутри Fragmenta кликни слушателем, вы будете просить родительскую активность изменить пункт ViewPager (см Communicating with the Activity знать, как это должно быть сделано):

    button.setOnClickListener(new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         activityCallback.setViewPagerItem(POSITION_OF_FRAGMENT_B); 
        } 
    }); 
    
  2. В вашей деятельности, в которой ViewPager проживает, вы будете писать:

    public void setViewPagerItem(int position) { 
        viewPager.setCurrentItem(position); 
        // following asks the fragmentB to start its animation on its view. 
        if (position == POSITION_OF_FRAGMENT_B) { 
         fragmentB.startYourAnimation(); 
        } 
    } 
    
  3. в FragmentB, добавьте метод:

    public void startYourAnimation() { 
        // write your code to animate your ListView or whatever you want to 
        // animate inside the FragmentB 
    } 
    

Примечание:

  1. Если вы не называло viewPager.setOffscreenPageLimit(), экземпляр FragmentB будет уже существовать, если вы делаете это из FragmentA или FragmentC,
  2. осколка не связываться с другими фрагментами напрямую, вместо этого они должны использовать свою родительскую деятельность как средний человек. См. Communicating with Other Fragments.
+0

Если проблема с вышеуказанным решением, сообщите мне. – Sufian

+0

Было ли мое предложение работать, или вы получили NPE и т. Д.? – Sufian

+0

Как получить экземпляр instanceB в фрагменте A. По традиционному методу Или у нас есть какой-либо метод в адаптере viewpager –

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