ViewPager+Fragment,某个Fragment里面的一条数据发生变化,如何局部刷新这条数据
巴扎黑2017-04-17 17:44:05
ViewPager
의 항목이 Fragment
인 경우 일반적으로 FragmentPagerAdapter
이 Adapter로 사용되며, 이 클래스는 Fragment
추가 시 태그를 추가하게 됩니다. 소스의 FragmentPagerAdapter
메소드 instantiateItem()
를 참고하세요.
이 태그는 makeFragmentName()
의 private 메소드를 통해 얻어지지만, 이 메소드의 viewId 매개변수는 ViewPager
의 id여야 하며, itemId는 getItemId()
메소드를 사용하면 됩니다. 태그를 직접 조립하여 조각을 얻을 수 있습니다.
그게 전부입니다.
ringa_lee2017-04-17 17:44:05
저도 이 문제에 대해 한동안 고민해 보았는데, 검색해봐도 마땅한 해결 방법을 찾을 수 없었습니다. pagerfragmentadapter에서는 해당 조각을 얻기 위한 API를 제공하지 않는 것 같습니다.
인덱스에 약한 참조 목록을 만들어 프래그먼트를 초기화할 때 어댑터에 추가한 다음 어댑터의 onDestroyItem(아마도 이렇게 불렀는지 기억이 안 나네요)을 다시 작성하여 목록에서 해당 항목을 제거했습니다. 여기.
조각 인스턴스를 얻은 후 원하는 대로 작동할 수 있습니다.
天蓬老师2017-04-17 17:44:05
Fragment가 포그라운드에 있을 때 LocalBroadcastManager / EventBus / otto / Rx를 사용하여 이벤트(메시지)를 구독할 수 있습니다.
Fragment가 백그라운드로 전환되면 구독을 취소하세요. Fragment가 다시 포그라운드로 전환되면 페이지 데이터를 새로 고치고 다시 구독하세요