我有ViewPager
使用FragmentPagerAdapter
显示三个标签,每个标签由其ow片段表示。其中一个片段包含一个列表,应该在切换/滑动到该选项卡时更新。但我找不到任何方法来实现它。我尝试使用onResume
方法,但片段似乎没有暂停并在标签更改时恢复。我还尝试在ViewPager.OnPageChangeListener
中使用MainActivity
:
@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似乎为null)。我在片段中初始化它:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mRecordingService = new RecordingService(getContext());
}
答案 0 :(得分:1)
使用onPageChangeListener
是正确的方法。我相信您的代码无效的原因是因为您在寻呼机适配器上调用了getItem
:getItem()
实际上返回了片段的 new 实例。为了获取当前实例,使用instantiateItem()
(返回对实际使用的片段的引用)。
将代码更改为如下所示:
@Override
public void onPageSelected(int position)
{
FragmentRefreshInterface currentFragment = (FragmentRefreshInterface) mSectionsPagerAdapter.instantiateItem(viewPager,position);
currentFragment.onRefreshed();
}
它应该有用。
答案 1 :(得分:0)
我建议onRefreshed()
中的代码改为onResume()
。 Fragment
没有onRefreshed()
方法。您必须实现另一个声明此方法的接口。
由于您要将数据存储在数据库中,因此应使用CursorAdapter
或子类,例如SimpleCursorAdapter
。如果您正确执行此操作,则在向数据库添加记录时ListView
将自动更新。然后,服务可以添加记录,而无需从片段中访问服务。
答案 2 :(得分:-1)
在您的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()