我有一个ViewPager
使用FragmentPagerAdapter
显示三个选项卡,每个选项卡由其ow片段表示。其中一个片段包含一个列表,应该在切换/滑动到该选项卡时更新。但我找不到任何办法让它发生。我尝试使用onResume
方法,但片段似乎没有暂停并恢复制表符更改。我还尝试在我的MainActivity
中使用ViewPager.OnPageChangeListener
:
@Override
public void onPageSelected(int position)
{
FragmentRefreshInterface currentFragment = (FragmentRefreshInterface) mSectionsPagerAdapter.getItem(position);
currentFragment.onRefreshed();
}
在片段中我使用了以下语句:
@Override
public void onRefreshed()
{
List<Record> records = mRecordingService.getRecords();
mRecordAdapter.clear();
mRecordAdapter.add(record);
}
但是使用这个代码我不能访问我的RecordingService
类,用于提供数据库功能(因为mRecordingService似乎是空的)。我在片段中像这样初始化它:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mRecordingService = new RecordingService(getContext());
}
使用onPageChangeListener
是正确的方法。我相信你的代码不工作的原因是因为你在你的寻呼机适配器上调用getItem
: getItem()
实际上返回一个新的片段实例。为了获得当前实例,您使用instantiateItem()
(它返回对实际使用的片段的引用)。
把你的代码改成这样:
@Override
public void onPageSelected(int position)
{
FragmentRefreshInterface currentFragment = (FragmentRefreshInterface) mSectionsPagerAdapter.instantiateItem(viewPager,position);
currentFragment.onRefreshed();
}
应该能行
我建议您将onRefreshed()
中的代码转到onResume()
中。Fragment
没有onRefreshed()
方法。您必须实现声明此方法的另一个接口。
由于您在数据库中存储数据,您应该使用CursorAdapter
或SimpleCursorAdapter
之类的子类。如果您这样做正确,当您向数据库添加记录时,ListView
将自动更新。然后,服务可以添加记录,而无需从片段访问服务。
在你的MainActivity中:
private FirstFragment firstFragment;
private WantedFragment wantedFragment;
private ThirdFragment thirdfragment;
在getItem switch(postition){
//return first, wanted, third fragments depending on position
}
onPageSelected:
if(position == 1) // position of the wanted fragment
wantedfragment.onRefreshed()