更新listview片段在viewpager选项卡的变化



我有一个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()方法。您必须实现声明此方法的另一个接口。

由于您在数据库中存储数据,您应该使用CursorAdapterSimpleCursorAdapter之类的子类。如果您这样做正确,当您向数据库添加记录时,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()

最新更新