带有ViewPager2的FragmentStateAdapter显示不正确的片段

时间:2020-10-21 03:42:53

标签: android-viewpager2 fragmentstateadapter

我的应用程序有一个活动,该活动使用回收者视图显示项目列表。选择一个列表项后,与该列表项关联的模型对象的UUID会作为附加意图发送到另一个活动,该活动的布局中具有ViewPager2适配器。我使用FragmentStateAdapter类创建了一个适配器,并将适配器附加到viewpager2小部件。由于某种原因,即使将正确的UUID发送到ViewPager2活动,并且在FragmentStateAdapter#createFragment方法中使用了正确的项目位置,我也显示了错误的片段。还将正确的UUID发送到创建的片段,并在创建的片段的小部件上设置正确的模型数据。我使用一个称为CrimeLab的单例来存储犯罪对象列表以及通过其UUID返回模型对象并返回存储的犯罪对象列表的方法。下面是该活动的代码,其中包含一个ViewPager2小部件并实现FragmentStateAdapter。

public class CrimePagerActivity extends AppCompatActivity{

private static final String EXTRA_ID = "com.bignerdranch.android.extra_id";

private ViewPager2 crimePager;
private CrimePagerAdapter adapter;
private List<Crime> crimes;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_crime_pager);

    crimes = CrimeLab.get(this).getCrimes();

    crimePager = findViewById(R.id.crime_pager);
    UUID crimeId = (UUID) getIntent().getSerializableExtra(EXTRA_ID);
    Crime crime = CrimeLab.get(this).getCrime(crimeId);
   
    adapter = new CrimePagerAdapter(this);
    crimePager.setAdapter(adapter);
    crimePager.setCurrentItem(crimes.indexOf(crime));
    
}

private class CrimePagerAdapter extends FragmentStateAdapter {

    public CrimePagerAdapter(@NonNull FragmentActivity fragmentActivity) {
        super(fragmentActivity);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        Crime crime = crimes.get(position);
        return CrimeFragment.newInstance(crime.getId());

    }

    @Override
    public int getItemCount() {
        return crimes.size();
    }
}

public static Intent createIntent(Context context, UUID crimeId) {
    Intent intent = new Intent(context, CrimePagerActivity.class);
    intent.putExtra(EXTRA_ID, crimeId);

    return intent;
}

}

0 个答案:

没有答案