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);