如何更新android FragmentPagerAdapter以显示新的数据集

时间:2016-04-03 05:12:32

标签: android image fragmentpageradapter android-pageradapter

我有一个自定义FragmentPagerAdapter,它包含两个ArrayLists数据集:

private ArrayList<Uri> lockedUris   = new ArrayList<>();
private ArrayList<Uri> unlockedUris = new ArrayList<>();

lockedUris始终是unlockedUris的包含子集。

我的应用使用unlockedUris使用FragmentPagerAdapter显示一组uri图像,每个片段一个图像。

我想做的事情如下:

我想从使用unlockedUris切换到使用lockedUris,然后更新所有FragmentPagerAdapter视图以显示新的图像集。 我目前从一个uri数组转换到另一个数组的方式是检查一个标志(isLocked)并在FragmentPagerAdapter的每个函数中返回一个数组或另一个数组,如下所示:

@Override
public int getItemPosition (Object object)
{
    PreviewFragment previewFragmentObject = (PreviewFragment) object;

    // Choose what Uris array to use on the comparison.
    ArrayList<Uri> tempUri = (isLocked)?lockedUris:unlockedUris;

    if (tempUri.contains(previewFragmentObject.getUri()))
    {
        Log.d("INFORMATION", "This Uri is part of the images array currently showing: "+previewFragmentObject.getUri());
        return tempUri.indexOf(previewFragmentObject.getUri());
    }
    else
    {
        Log.d("INFORMATION", "This Uri is NOT part of the images array currently showing: "+previewFragmentObject.getUri());
        return POSITION_NONE;
    }
}

@Override
public Fragment getItem(int position) {
    if (isLocked)
    {
        return PreviewFragment.newInstance(lockedUris.get(position));
    } else
    {
        return PreviewFragment.newInstance(unlockedUris.get(position));
    }
}

@Override
public int getCount() {
    if (isLocked)
    {
        return lockedUris.size();
    } else
    {
        return unlockedUris.size();
    }
}

public Uri getUri(int position) {
   if(isLocked)
   {
       return lockedUris.get(position);
   }
   else
   {
       return unlockedUris.get(position);
   }
}

当然,我也希望能够在将旗帜恢复正常后再回到使用unlockedUris。

现在我的应用程序能够在寻呼机内显示unlockedUris中的所有Uris,我可以在所有图像中来回滑动,但是当我切换到lockedUris(isLocked = true)时,寻呼机会保留当前图像但其余的图像应该保持不同,并且通常与unlockedUris不同的子集不等于lockedUris。

我知道没有代码很难理解,但请让我知道代码的哪些部分会有所帮助,我会在这里添加它,我不想添加一大块甚至可能与此问题无关的代码(我完全迷失了寻呼机的工作方式:s)

0 个答案:

没有答案