2016-10-02 3 views
0

임 탭 레이아웃을 사용과 보이지 않는 캐시 조각에 ViewPager/탭 구현에 조각을 새로 고침하고 메신저를 시도 (ViewPager와,이 어댑터는 FragmentStatePagerAdapterTabLayout의 확장 것) Tab1에있는 버튼을 클릭하면 tab2에서 listview를 새로 고침하십시오. 다른 어떤 방법으로도 알지 못하기 때문에 지금은 viewpager를 보유하고있는 활동에서이 일을하고 있습니다.다시로드는/사용자 정의 어댑터

View _list = Activity.FindViewById(Resource.Id.MessagesListView); 
var _adapter = new MessagesAdapter(Activity, null); 
_adapter.NotifyDataSetChanged(); 
_adapter = new MessagesAdapter(Activity, _reviewList); 
var _listview= (ListView)_list; 
_listview.Adapter = _adapter; 
_adapter.NotifyDataSetChanged(); 

당신으로 :이 같은으로 목록보기 새로 고침

  1. 모니터 이 때 표시 될 TAB2
  2. ViewPager

  3. 을 OnTabSelected : 내가 새로 고침하는 방법은하는 것입니다 코드에서 이해할 수도, 내 문제는 ListView 나던가 항목을 대체 할, 그것은 단지 다른 사람의 상단에 그들을 추가, 어떻게 listview 지울 수 있습니까?

    나는 또한 행운을 가지고 으로 시도했다. .RemoveViews (0, test.ChildCount); 내 listview 어댑터는 BaseAdapter의 간단한 확장입니다.

    당신은 제안

    에 메신저 개방 새로 고침 ListView에 또는 조각의 또 다른 더 좋은 방법이 또한 경우

    편집 : 사람이 더 많은 제안이있는 경우, 꽤 잘 작동

    내 최종 어댑터 의견을 남겨주세요.

    using Android.Support.V4.App; 
    using Android.Util; 
    using Java.Lang; 
    
    using Fragment = Android.Support.V4.App.Fragment; 
    
    namespace StaffPro 
    { 
        public class TabsFragmentPagerAdapter : FragmentStatePagerAdapter 
        { 
         private readonly Fragment[] fragments; 
    
         private readonly ICharSequence[] titles; 
    
         SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>(); 
    
         public TabsFragmentPagerAdapter(FragmentManager fm, Fragment[] fragments, ICharSequence[] titles) : base(fm) 
         { 
          this.fragments = fragments; 
          this.titles = titles; 
         } 
         public override int Count 
         { 
          get 
          { 
           return fragments.Length; 
          } 
         } 
    
         public override Fragment GetItem(int position) 
         { 
          return fragments[position]; 
         } 
    
         public override ICharSequence GetPageTitleFormatted(int position) 
         { 
          return titles[position]; 
         } 
         public override void DestroyItem(Android.Views.View container, int position, Java.Lang.Object objectValue) 
         { 
    
          registeredFragments.Remove(position); 
          base.DestroyItem(container, position, objectValue); 
         } 
         public override Java.Lang.Object InstantiateItem(Android.Views.ViewGroup container, int position) 
         { 
          Fragment fragment = (Fragment)base.InstantiateItem(container, position); 
          registeredFragments.Put(position, fragment); 
          return fragment; 
         } 
         public Fragment GetRegisteredFragment(int position) 
         { 
          return registeredFragments.Get(position); 
         } 
        } 
    } 
    

답변

1

새로 고침 상위 액티비티의 해당 조각 내에서 직접

당신은 조각을 반환에 대한 귀하의 ViewPager 어댑터에 방법을 구현해야하므로 것 같은 것을 : 당신의 주요 활동에서 그런

public override void DestroyItem(View container, int position, Object @object) 
    { 
     registeredFragments.Remove(position); 
     base.DestroyItem(container, position, @object); 
    } 

    public override Object InstantiateItem(ViewGroup container, int position) 
    { 
     Android.Support.V4.App.Fragment fragment = (Android.Support.V4.App.Fragment)base.InstantiateItem(container, position); 
     registeredFragments.Put(position, fragment); 
     return fragment; 
    } 

    public Android.Support.V4.App.Fragment GetRegisteredFragment(int position) 
    { 
     return registeredFragments.Get(position); 
    } 

: 대답에 대한

public void UpdateFragment() 
    { 
     var activeFragment = _Adaptor.GetRegisteredFragment(1); // where in the viewpager the fragment is 
     ((YourFragment)activeFragment).MethodOnFragment(); 
    } 
+0

감사합니다, 최대한 빨리 시도해 보겠습니다. getregisteredfragment에서 위치가 무엇입니까? viewpager가 조각 (예 : 1 단편 1tab, 2 단편 2 탭 등)의 줄 또는 캐시 된 단편의 위치를로드하는 초기 위치? – CDrosos

+0

@CDrosos 이렇게 등록 된 조각은 SparseArray 유형이어야합니다 (SparseArray registeredFragments = new SparseArray ();) 위치는 뷰 페이지의 위치입니다 프래그먼트가 등록됩니다. InstantiateItem 인스턴스화 될 때 프래그먼트 위치를이 배열에 넣습니다. 따라서 4 페이지짜리 Viewpager를 가지고 있고 페이지가 0이고 조각이 4 페이지에 있다면 그 위치는 3입니다. – jaymarvels

+0

안녕하십니까. 프래그먼트가 회전 진행 막대를 표시 할 수있는 방법이 있습니까? 그 로딩, 우리가 탭을 바꿀 때? 페이스 북의 메신저처럼, 감사합니다. – CDrosos

관련 문제