Android getArguments().getInt()开始从";返回;“1”;,取而代之的是;0“;
请帮我解决这个问题 我有一个带有Android getArguments().getInt()开始从";返回;“1”;,取而代之的是;0“;,android,android-fragments,android-recyclerview,bundle,realm,Android,Android Fragments,Android Recyclerview,Bundle,Realm,请帮我解决这个问题 我有一个带有ViewPager的Activity和5个recyclererviewfragments,每个RecyclerFragment都包含动态CardViews ViewPager适配器的代码: public class CustomFragmentPagerAdapter extends FragmentStatePagerAdapter { private Board board; private long boardID; public
ViewPager
的Activity
和5个recyclererviewfragment
s,每个RecyclerFragment
都包含动态CardView
s
ViewPager
适配器的代码:
public class CustomFragmentPagerAdapter extends FragmentStatePagerAdapter {
private Board board;
private long boardID;
public CustomFragmentPagerAdapter(FragmentManager fm, Board board, long id) {
super(fm);
this.board = board;
this.boardID = id;
}
@Override
public int getCount() {
return 5;
}
@Override
public CharSequence getPageTitle(int position) {
return board.getMyLists().get(position).getName();
}
//Here I define fragment, int position - is a position of Fragment in ViewPager
@Override
public Fragment getFragment( int position) {
**return RecyclerViewFragment.newInstance(boardID, position);**
}
}
接下来是片段的新实例:
public static RecyclerViewFragment newInstance(long id, int listPosition){
Bundle args = new Bundle();
args.putLong(BUNDLE_ID, id);
args.putInt(BUNDLE_LIST_POSITION, listPosition);
RecyclerViewFragment fragment = new RecyclerViewFragment();
fragment.setArguments(args);
return fragment;
}
我通过Bundle-listPosition存储片段的位置
然后我通过getArguments()
所以问题是,当我从getArguments()获取int位置时,它有下一个序列-1,2,3,4,0。但它是按-0,1,2,3,4的顺序写的
也许你认为这无关紧要,但事实恰恰相反。当我从DB获得关于dynamic CardView的信息时,领域从第0个片段开始,而getArguments()从1开始。那东西扔出去了
ArrayIndexOutOfBoundsException
[Update]我在newInstance和OnCreateView中添加了Log.d
public static RecyclerViewFragment newInstance(long id, int listPosition){
Bundle args = new Bundle();
args.putLong(BUNDLE_ID, id);
Log.d(TAG, listPosition + " Before put");
args.putInt(BUNDLE_LIST_POSITION, listPosition);
Log.d(TAG, listPosition + " After put");
RecyclerViewFragment fragment = new RecyclerViewFragment();
fragment.setArguments(args);
return fragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
tinyDB = new TinyDB(getContext());
boardPosition = tinyDB.getInt("boardPosition");
boardID = this.getArguments().getLong(BUNDLE_ID);
listPosition = this.getArguments().getInt(BUNDLE_LIST_POSITION, 0);
Log.d(TAG, listPosition + " Get ");
return inflater.inflate(R.layout.fragment_recyclerview, container, false);
}
在LogCat中,我得到下一个:
06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 0 Before put
06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 0 After put
06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 1 Before put
06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 1 After put
06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 2 Before put
06-12 00:37:46.188 25265-25265/com.treggo.flexible D/mLogs: 2 After put
06-12 00:37:46.189 25265-25265/com.treggo.flexible D/mLogs: 3 Before put
06-12 00:37:46.189 25265-25265/com.treggo.flexible D/mLogs: 3 After put
06-12 00:37:46.189 25265-25265/com.treggo.flexible D/mLogs: 4 Before put
06-12 00:37:46.189 25265-25265/com.treggo.flexible D/mLogs: 4 After put
06-12 00:37:46.190 25265-25265/com.treggo.flexible D/mLogs: 1 Get
06-12 00:37:46.266 25265-25265/com.treggo.flexible D/mLogs: 2 Get
06-12 00:37:46.322 25265-25265/com.treggo.flexible D/mLogs: 3 Get
06-12 00:37:46.397 25265-25265/com.treggo.flexible D/mLogs: 4 Get
06-12 00:37:46.452 25265-25265/com.treggo.flexible D/mLogs: 0 Get
顺便说一句,为了绕过异常,我设置了9个CardView,而不是从Realm读取它,虽然我不知道您是如何实现列表位置的索引的,但我假设它是从1开始的,而不是从0开始的
如果是这种情况,请在newInstance()
方法中替换以下行:
args.putInt(BUNDLE_LIST_POSITION, listPosition);
为此:
args.putInt(BUNDLE_LIST_POSITION, listPosition - 1);
在适当的位置添加+/-1?:数据ViewPager同时加载当前片段和相邻片段。我不明白你怎么能先得到1而不是0顺便说一下,你应该提供logcat和抛出错误的代码。寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。请参阅创建。请在oncreate中尝试此代码@重写public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);if(getArguments()!=null){boardID=getArguments().getLong(Bundle_ID);listPosition=getArguments().getInt(Bundle_LIST_POSITION);}您希望在put操作前后数字发生神奇的变化吗?
args.putInt(BUNDLE_LIST_POSITION, listPosition - 1);