进出口使用标签布局不可见的缓存片段刷新残片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