片段状态寻呼机适配器显示错误的片段
Fragment State Pager Adapter Showing Wrong Fragment
我有一个 FragmentStatePagerAdapter,它在下一个片段中显示当前片段的详细信息。这是页面适配器
public class CustomerPagerAdapter extends FragmentStatePagerAdapter
{
public SectionsPagerAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int position) {
Gson gson = new Gson();
Customer selectedCustomer = mCustomers.get(position);
String serializedCustomer = gson.toJson(selectedCustomer);
return CustomerDetailsFragment.newInstance(serializedCustomer);
}
@Override
public int getCount()
{
return mCustomers.size();
}
@Override
public CharSequence getPageTitle(int position)
{
Customer selectedCustomer = mCustomers.get(position);
String CustomerTitle = selectedCustomer.getFirstName() + " " + selectedCustomer.getLastName();
return CustomerTitle;
}
}
这是显示详细信息的片段
public static class CustomerDetailsFragment extends Fragment {
private Customer passedInCustomer;
public CustomerDetailsFragment() {
// Required empty public constructor
}
public static CustomerDetailsFragment newInstance(String serializedCustomer){
CustomerDetailsFragment fragment = new CustomerDetailsFragment();
if (serializedCustomer != null && !serializedCustomer.isEmpty()){
Bundle args = new Bundle();
args.putString("customerInfo", serializedCustomer);
fragment.setArguments(args);
}
return fragment;
}
private void getPosition(){
Bundle args = getArguments();
if (args != null && args.containsKey("customerInfo")){
String serializedCustomer = (getArguments().getString("customerInfo"));
Gson gson = new Gson();
passedInCustomer = gson.fromJson(serializedCustomer, Customer.class);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mRootView = inflater.inflate(R.layout.fragment_Customer_details, container, false);
if (passedInCustomer != null) {
showCustomerInfo();
}
return mRootView;
}
}
问题源于每次滑动都会调用两次 getItem,并且需要显示的信息包含在一个列表中,因此当调用两次 getItem 时,会获取列表中的第二个对象并将其显示在本应显示第一个对象的屏幕。
有没有人处理过在您必须按需创建片段的可滚动 ViewPager 中显示第 n 个项目的问题。如果是的话,你能给我一些建议如何处理吗?
谢谢
我通过调用 pager.getCurrentItem() 获取当前显示项目的位置解决了这个问题。
我注意到只有当我有具有不同值的相同片段时才会出现此问题(在大多数情况下可能是这样)。因此,在长期寻找正确答案之后,我决定在 getItem() 方法中每个奇数时间 return 一个片段,每个偶数时间 return 另一个片段(这些片段完全相同,除了他们的名字:
@Override
public Fragment getItem(int position) {
if(position % 2 == 0){
return FragmentGalleryImage.newInstance(images.get(position), activity);
}else{
return FragmentGalleryImage2.newInstance(images.get(position), activity);
}
}
我顺利解决了问题。
我有一个 FragmentStatePagerAdapter,它在下一个片段中显示当前片段的详细信息。这是页面适配器
public class CustomerPagerAdapter extends FragmentStatePagerAdapter
{
public SectionsPagerAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int position) {
Gson gson = new Gson();
Customer selectedCustomer = mCustomers.get(position);
String serializedCustomer = gson.toJson(selectedCustomer);
return CustomerDetailsFragment.newInstance(serializedCustomer);
}
@Override
public int getCount()
{
return mCustomers.size();
}
@Override
public CharSequence getPageTitle(int position)
{
Customer selectedCustomer = mCustomers.get(position);
String CustomerTitle = selectedCustomer.getFirstName() + " " + selectedCustomer.getLastName();
return CustomerTitle;
}
}
这是显示详细信息的片段
public static class CustomerDetailsFragment extends Fragment {
private Customer passedInCustomer;
public CustomerDetailsFragment() {
// Required empty public constructor
}
public static CustomerDetailsFragment newInstance(String serializedCustomer){
CustomerDetailsFragment fragment = new CustomerDetailsFragment();
if (serializedCustomer != null && !serializedCustomer.isEmpty()){
Bundle args = new Bundle();
args.putString("customerInfo", serializedCustomer);
fragment.setArguments(args);
}
return fragment;
}
private void getPosition(){
Bundle args = getArguments();
if (args != null && args.containsKey("customerInfo")){
String serializedCustomer = (getArguments().getString("customerInfo"));
Gson gson = new Gson();
passedInCustomer = gson.fromJson(serializedCustomer, Customer.class);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mRootView = inflater.inflate(R.layout.fragment_Customer_details, container, false);
if (passedInCustomer != null) {
showCustomerInfo();
}
return mRootView;
}
}
问题源于每次滑动都会调用两次 getItem,并且需要显示的信息包含在一个列表中,因此当调用两次 getItem 时,会获取列表中的第二个对象并将其显示在本应显示第一个对象的屏幕。
有没有人处理过在您必须按需创建片段的可滚动 ViewPager 中显示第 n 个项目的问题。如果是的话,你能给我一些建议如何处理吗?
谢谢
我通过调用 pager.getCurrentItem() 获取当前显示项目的位置解决了这个问题。
我注意到只有当我有具有不同值的相同片段时才会出现此问题(在大多数情况下可能是这样)。因此,在长期寻找正确答案之后,我决定在 getItem() 方法中每个奇数时间 return 一个片段,每个偶数时间 return 另一个片段(这些片段完全相同,除了他们的名字:
@Override
public Fragment getItem(int position) {
if(position % 2 == 0){
return FragmentGalleryImage.newInstance(images.get(position), activity);
}else{
return FragmentGalleryImage2.newInstance(images.get(position), activity);
}
}
我顺利解决了问题。