2016-10-02 5 views
0

イムタブレイアウトを使用した非可視のキャッシュされた断片にViewPager /タブの実装でフラグメントをリフレッシュし、イムしよう(ViewPagerと、それはアダプタがFragmentStatePagerAdapterTabLayoutの拡張でいます) tab1上のボタンをクリックすると、tab2のリストビューを更新します。 私は他の方法を知らないので、現在、ビューページを保持しているアクティビティからこの仕事をしています。私はリフレッシュ 方法は、それはにある:あなたのようリロードは/カスタムアダプタ

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すると、このようなもので、リストビューをリフレッシュViewPager
  2. のをOnTabSelectedコードから理解できるかもしれないが、私の問題は、ListViewがアイテムを置き換えないこと、他のアイテムの上に追加するだけで、リストビューをクリアする方法は?

    私はまた、運がないと試してみました。.RemoveViews(0、test.ChildCount); 私のlistviewアダプタは、BaseAdapterの単純な拡張です。

    また

    あなたが提案

    EDITにさわやか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ページのビューページャーがあり、ページ0にあり、フラグメントが4ページにある場合、位置は3です。 – jaymarvels

+0

こんにちは、もう一度、フラグメントがスピン・プログレス・バーを表示する方法を考えていますか?その読み込み、タブを変更したとき? Facebookのメッセンジャーのように、ありがとう – CDrosos

関連する問題