更新viewpager选项卡上的listview片段更改

时间:2016-08-31 21:33:33

标签: android android-viewpager

我有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());
}

3 个答案:

答案 0 :(得分:1)

使用onPageChangeListener是正确的方法。我相信您的代码无效的原因是因为您在寻呼机适配器上调用了getItemgetItem()实际上返回了片段的 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()