我的应用程序有一个活动,它使用RecyclerView
. 选择列表项目时,将与该列表项目关联的模型对象的UUID作为另一个活动的意图发送,该活动ViewPager2
在其布局中具有适配器。
我使用FragmentStateAdapter
该类创建了一个适配器并将适配器附加到ViewPager2
小部件。出于某种原因,即使将正确的 UUID 发送到ViewPager2
Activity 并且在方法中使用了正确的项目位置,我也会显示错误的片段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;
}
}