我有一个自定义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)