進出口使用標籤佈局不可見的緩存片段刷新殘片ViewPager /標籤實現(與ViewPager,它的適配器是FragmentStatePagerAdapter和TabLayout的擴展)和IM嘗試當我點擊tab1上的一個按鈕時刷新tab2上的listview。 我從現在持有viewpager的活動中完成這項工作,因爲我不知道任何其他方式來做這件事。 我刷新它的方法是:重新加載/與自定義適配器
- 監視器OnTabSelected ViewPager 的
當TAB2變得可見,刷新的ListView像這樣的東西:
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();
正如你可能從代碼中可以理解,我的問題是ListView不會替換它的項目,它只會將它們添加到其他項目的頂部,我如何清除listview?
我也試過沒有運氣.RemoveViews(0,test.ChildCount); 我的listview適配器是BaseAdapter的簡單擴展。
此外,如果有清爽的ListView或片段的另一種更好的方式 IM開放的建議
編輯:
我的作品非常好,如果任何人有更多的建議,最終適配器使其更好請發表評論
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);
}
}
}
感謝您的回答,我會盡快嘗試,在getregisteredfragment上的位置是什麼? viewpager加載片段的初始位置(在標籤的行中,例如1片段1tab,2片段2標籤等)或其緩存片段的位置? – CDrosos
@CDrosos所以註冊片段應該是類型SparseArray的(SparseArray registeredFragments =新SparseArray ())的位置是在viewpager該片段已被註冊。 InstantiateItem在其實例化時將碎片位置放入此數組中。所以,如果你有一個Viewpager用4頁和你是第0頁上的片段是第4頁上的位置是3 –
jaymarvels
大家好,你在你的腦海中顯示一個旋轉的進度條,而該片段有辦法它的加載,當我們改變一個標籤?像在Facebook的使者一樣,謝謝 – CDrosos