我在数据库端有大量数据,我正在使用50行的服务检索数据并将这些数据放入ViewPager片段中。它工作正常,但是一旦用户到达第50页,我需要重新调用服务,并且需要使用新数据更新片段。目前,我正在调用Android.Support.V4.App.Fragment的覆盖newInstance(字符串消息)方法中的服务。
有没有办法在Xamarin Anadroid中动态更新带有新数据的片段?
答案 0 :(得分:2)
我有同样的问题。我将FragmentPagerAdapter更改为FragmentStatePagerAdapter
时解决了此问题仅在第一次显示
class ViewPagerPageAdapter : FragmentPagerAdapter
还显示何时重新加载片段
class ViewPagerStatePagerAdapter : FragmentStatePagerAdapter
答案 1 :(得分:0)
更新特定的viewpager片段。我认为您不需要重新创建活动或重新创建片段。
尝试使用adapter.NotifyDataSetChanged()
更新片段。
按照setps更新sepcific viewpager片段:
<强> 1。创建处理程序
class MyHandler : Handler
{
public override void HandleMessage(Message msg)
{
if (msg.What == 1)
{
mainAdapter.NotifyDataSetChanged();
}
}
}
<强> 2。到达第50个片段时发送消息
class PageChangeListen : Java.Lang.Object, IOnPageChangeListener
{
public void OnPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
public void OnPageScrollStateChanged(int state)
{
}
public void OnPageSelected(int position)
{
if (position == 1)
{
Message msg = new Message();
msg.What = 1;
new MyHandler().SendMessage(msg);
}
}
}
第3。在主线程中,您将收到该消息并致电NotifyDataSetChanged
<强> 4。添加片段的更新界面
public interface Updateable
{
void update();
}
public class MyFragment : Android.Support.V4.App.Fragment, Updateable
{
TextView questionBox;
public MyFragment() { }
public static MyFragment NewInstance(String question)
{
MyFragment fragment = new MyFragment();
return fragment;
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.Inflate(Resource.Layout.MyFragmentLayout, container, false);
questionBox = (TextView)view.FindViewById(Resource.Id.textView1);
return view;
}
public void update()
{
questionBox.Text = "Mike Update";
}
}
<强> 5。片段将通过调用GetItemPosition
更新用户界面。
public override int GetItemPosition(Object @object)
{
MyFragment f = (MyFragment)@object;
System.Console.WriteLine(f.Id + "" + f.Resources + "" + f.Tag);
if (f != null)
{
f.update();
}
return base.GetItemPosition(@object);
}
在我的示例中,我使用文本&#34; Mike Update&#34;更新了第二页。您可以更改更新条件和内容。
屏幕截图: