java - 带有 ViewPager2 的 FragmentStateAdapter 显示不正确的片段
问题描述
我的应用程序有一个活动,它使用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;
}
}
解决方案
推荐阅读
- javascript - 我无法让我的脚本到 wp,因为检查时 wp html 中没有任何内容
- java - 大型 XSLT(约 10000 行)无法转换输入消息(Xalan)
- docker - 在 Windows 上安装 Filebeat
- spring-cloud-gateway - 如何调试 Spring Cloud Gateway 内存泄漏?
- excel - 试图获取用户名,以便我可以在查询中使用它
- postgresql - 如何选择jsonb与整数和文本数组重叠的行?(PostgreSQL)
- powershell - 至少我认为PowerShell没有正确处理参数?
- node.js - 将格子与条纹一起使用
- python - 如何将元组列表从 Python 传递到 PHP 脚本?
- python - Python Soap 客户端调用 WCF 端点并返回对象列表而不显示类名