2016-07-22 1 views
0

뷰 페이지에 조각이 5 개 있다고 가정합니다.다음에 event를 수행하는 방법 viewpager의 Fragment?

조각 B에 갈 때 버튼이 있습니다.이 버튼을 누르면 뷰 페이지가 조각 B로 스크롤됩니다. 어떻게 든 조각 A의 지속 시간을 제어했습니다. 이제 B thing에 스크롤 가능한 컨테이너가 있습니다. A에서 B 사이의 스크롤이 발생하는 동안 해당 컨테이너를 스크롤하려고합니다. 이제 조각 A에서 B로 이동 한 후 스크롤합니다.이 전환 사이에 이런 상황이 발생하기를 바랍니다.

내부의 첫 번째 단편은 : 때 그 변화

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

     MainActivity.pager.setCurrentItem(1); 

    } 
} 

그것은 지금 1로 내 호출기 위치 0으로 변경됩니다. 뷰 페이지의 스크롤 속도를 제어했습니다. 두 번째 조각의 맨 위에는 ScrollView가 있습니다. 조각이 변경된 후에는이 scrollview에서 스크롤을 수행해야합니다.

+0

ViewPager에서 조각에 대한 참조가 없으므로 LocalBroadcastReceiver 또는 다른 EventBus를 사용할 수 있습니다. – CherryPerry

+0

Fragment A에서 B로 전환하는 과정을 간략하게 설명해야한다고 생각합니다. 어떤 종류의 제스처를 사용하고 있습니까? 사용자가 예기치 않은 것을 발견하지 못하도록 의미있는 방식으로 사용 중지하는 방법에 대한 생각? – Sufian

+0

버튼 클릭시하고 있습니다. 나는 이미 클릭 수를 사용하고 있다는 점에 대해 의문을 제기했다. –

답변

-1

아니요 목록보기 또는 recyclerview와 같은 스크롤 가능한보기가 있기 때문에 불가능합니다. 사용자가 볼 수 있고 스크롤 할 때만 항목이 만들어 지므로 조각이 보이지 않으면 스크롤 할 수 없습니다. 아이 스크롤 할 수있는 뷰.

+0

뷰 호출기 없이는 어떤 방법이 있습니까? –

+0

뷰 파인더와 관련이 없으므로 필요한 것은 없습니다. – 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을에 당신이 쓸 것 상주 FragmentB에서

    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. 을, 당신은 방법을 추가

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

주 :

  1. 당신은 당신이 FragmentA 또는 FragmentC에서 그 일을하는 경우 FragmentB의 인스턴스가 이미 존재합니다, viewPager.setOffscreenPageLimit()라고했습니다 않는 한,
  2. 단편해야 대신 다른 단편과 직접 통신하지 말고 대신 부모 활동을 중간 자로 사용해야합니다. Communicating with Other Fragments을 참조하십시오.
+0

위의 해결 방법에 문제가있는 경우 알려 주시기 바랍니다. – Sufian

+0

제 제안이 효과가 있었습니까? 아니면 NPE 등을 받았습니까? – Sufian

+0

fragmentA에서 fragmentB 인스턴스를 얻는 방법. 전통적인 방식으로 또는 뷰 페이지 어댑터에 어떤 메소드가 있습니다. –

관련 문제