Android ViewPager2库在暂停事件上抛出TransactionTooLarge异常通常是由于数据量过大导致的。
解决该问题的方法是使用Bundle将数据保存在Fragment的arguments中,而不是直接传递大量数据。下面是一个代码示例:
public class MyFragment extends Fragment {
private static final String ARG_DATA = "data";
public static MyFragment newInstance(ArrayList data) {
MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putStringArrayList(ARG_DATA, data);
fragment.setArguments(args);
return fragment;
}
// ...
}
public class MyFragment extends Fragment {
private static final String ARG_DATA = "data";
private ArrayList mData;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mData = getArguments().getStringArrayList(ARG_DATA);
}
}
// ...
}
public class MyAdapter extends FragmentStateAdapter {
private ArrayList> mDataList;
public MyAdapter(@NonNull FragmentActivity fragmentActivity, ArrayList> dataList) {
super(fragmentActivity);
mDataList = dataList;
}
@NonNull
@Override
public Fragment createFragment(int position) {
ArrayList data = mDataList.get(position);
return MyFragment.newInstance(data);
}
@Override
public int getItemCount() {
return mDataList.size();
}
}
通过以上方法,可以避免在ViewPager2暂停事件中传递大量数据而导致TransactionTooLarge异常的问题。